我正在使用 Ubuntu 并且一直在尝试做一个简单的自动化,这需要我将 [网站名称] 和 [文件路径] 输入到命令行列表中。我正在使用子进程和调用函数。我首先使用“ls”命令尝试了一些更简单的方法。
from subprocess import call
text = raw_input("> ")
("ls", "%s") % (text)
这些返回为“buffsize 必须是一个整数”。我试图找出它是什么,显然我必须将命令作为列表传递。所以我尝试在我尝试编码的主要事情上这样做。
from subprocess import call
file_path = raw_input("> ")
site_name = raw_input("> ")
call("thug", -FZM -W "%s" -n "%s") % (site_name, file_path)
这些在第一个“%s”上作为无效语法传递。谁能指出我正确的方向?
最佳答案
您不能在元组上使用 %
。
("ls", "%s") % text # Broken
你可能是说
("ls", "%s" % text)
但是 "%s"% string
显然会返回简单的 string
,所以这里不需要使用格式化。
("ls", text)
这仍然没有任何用处;你忘记了调用
吗?
call
的参数中也不能有未加引号的字符串。
call("thug", -FZM -W "%s" -n "%s") % (site_name, file_path) # broken
需要引用 -FZM
和 -W
,而且,如果您使用格式字符串,则格式需要与格式字符串相邻。
call(["thug", "-FZM", "-W", site_name, "-n", file_path])
还要注意 call()
的第一个参数是一个正确的列表,还是一个长字符串(在这种情况下你需要 shell=True
,你想要 avoid if you can )。
如果您正在编写新脚本,您绝对应该认真考虑以 Python 3 为目标(在这种情况下,您希望转向 subprocess.run()
和input()
而不是 raw_input()
。 Python 2 已经过了最初宣布的生命周期结束日期,尽管它被推迟了几年,因为几年前 Py3k 的采用仍然很缓慢。它不再是,也不应该是——你想在 Py3 中,这就是 future 所在。
关于python - 如何使用 subprocess.call 命令在 Linux 终端中输入指向文件路径的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47522743/