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

Dag*_*Dag 18 python

我曾经能够做一个subprocess.call(["command","-option value -option value"]) ,它会工作有一个更改命令,以正确使用引号中的东西,但现在我必须更改我的子进程调用命令看起来像这样:

subprocess.call(["command","-option","value","-option","value"])
Run Code Online (Sandbox Code Playgroud)

有什么我可以做的,让它在python中再次工作?

这些os.system("command -option value -option value") 作品和以前一样.

unu*_*tbu 37

shell=True如果可以,请避免- 这是一种安全风险.为此, shlex.split就足够了:

import subprocess
import shlex
subprocess.call(shlex.split("command -option value -option value"))
Run Code Online (Sandbox Code Playgroud)

  • @Dag:它允许你避免使用`shell = True`,这是一个安全风险. (5认同)
  • `shlex.split`基本上为你创建了一个列表.所以它几乎等同于`subprocess.call(["command"," - option","value"," - option","value"])`而不必显式写入列表文字. (3认同)

Bla*_*rad 3

您需要指定shell=True让 subprocess.call 来解释该字符串。

请参阅subprocess.Popen 构造函数文档中的注释(subprocess.call 方法采用与 subprocess.Popen 构造函数相同的参数)。