subprocess.call要求所有参数用逗号分隔

21 投票
2 回答
21117 浏览
提问于 2025-04-16 06:31

我以前可以用 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 构造函数接受的参数是一样的)。

撰写回答