subprocess.call要求所有参数用逗号分隔
我以前可以用 subprocess.call(["command","-option value -option value"])
这样的方式来执行命令,而且它能正常工作。后来这个命令在处理带引号的内容时发生了变化,所以现在我必须把我的 subprocess 调用改成这样:
subprocess.call(["command","-option","value","-option","value"])
有没有什么办法可以让它在 Python 中再次像以前那样工作呢?
而 os.system("command -option value -option value")
的效果和以前一样。
2 个回答
45
如果可以的话,尽量不要使用 shell=True
,因为这样会有 安全风险。为了这个目的,使用 shlex.split 就足够了:
import subprocess
import shlex
subprocess.call(shlex.split("command -option value -option value"))
3
你需要设置 shell=True
,这样 subprocess.call 才能正确理解你输入的字符串。
可以查看 subprocess.Popen 构造函数的文档 中的说明(subprocess.call 方法和 subprocess.Popen 构造函数接受的参数是一样的)。