我曾经能够做一个subprocess.call(["command","-option value -option value"])
并且可以使用命令进行更改以正确处理引号中的内容,但现在我必须将我的子进程调用命令更改为如下所示:
subprocess.call(["command","-option","value","-option","value"])
我有什么办法可以让它在python中以另一种方式工作吗?
os.system("command -option value -option value")
的工作方式与以前相同。
答案 0 :(得分:37)
如果可以,请避免使用shell=True
- 这是security risk。为此,shlex.split就足够了:
import subprocess
import shlex
subprocess.call(shlex.split("command -option value -option value"))
答案 1 :(得分:3)
您需要指定shell=True
以获取subprocess.call来解释字符串。
请参阅subprocess.Popen constructor documentation中的注释(subprocess.call方法采用与subprocess.Popen构造函数相同的参数)。