为什么在python中的subprocess.check_output()中不允许'(单引号)或“(双引号)?

时间:2014-03-06 12:38:46

标签: python subprocess

我使用subprocess.check_output()方法从python脚本中执行命令。

有一些命令需要“(双引号)”才能出现在语法中。这是一个例子:

>drozer console connect -c "run app.package.info -a com.package.name"

如果我们从上面的命令中删除“(双引号)”,则抛出错误。

我做了以下事情:

string = '\"run app.package.info -a com.package.name\"'
command = ['/usr/bin/drozer','console','connect','-c',string]
output = subprocess.check_output(command)

这让我错误:

*** Unknown syntax: "run app.package.info  -a com.package.name"

请注意:没有引号的命令正在通过subprocess.check_output运行,因此代码可以正常运行。

如何解决此问题? 任何帮助都将受到高度赞赏。

由于

4 个答案:

答案 0 :(得分:5)

您不需要双引号。

shell命令需要它们的原因是shell正在从字符串解析命令行,并使用它们作为文本run app.package.info -a com.package.name应该放在单个<中的指示/ em>参数:

#!/usr/bin/env python
import subprocess

c_arg = 'run app.package.info -a com.package.name'
command = ['/usr/bin/drozer', 'console', 'connect', '-c', c_arg]
output = subprocess.check_output(command)
print("Got %r" % (output,))

当您使用代码启动进程时,您明确指定了各个参数,并且没有进行shell解析,因此不需要额外的引号。

答案 1 :(得分:0)

您可以尝试使用shell=True选项,如:

output = subprocess.check_output(command, shell=True)

答案 2 :(得分:0)

要解决您的问题,您需要一个了解subprocess命令参数要求的拆分方法。像这样使用shlex

>>> import shlex
>>> import subprocess
>>> 
>>> command = 'drozer console connect -c "run app.package.info -a com.package.name"'
>>> command = shlex.split(command)
>>> command
['drozer', 'console', 'connect', '-c', 'run app.package.info -a com.package.name']
>>> output = subprocess.check_output(command)

答案 3 :(得分:-2)