我使用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运行,因此代码可以正常运行。
如何解决此问题? 任何帮助都将受到高度赞赏。
由于
答案 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)