我使用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运行,所以代码工作正常。
我该如何解决报价这个问题呢? 任何帮助将高度赞赏。
谢谢
你不需要双引号。
你需要他们用shell命令的原因是,该壳解析来自一个字符串命令行,并把它们作为指示该文本run app.package.info -a com.package.name
应放置在一个一个参数:
#!/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,))
当你使用代码来启动一个进程,您明确指定个别的论点,并没有壳解析是怎么回事,所以没有必要额外的报价。
为了解决你的问题,你需要一个理解分裂法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)
您可以尝试使用选项shell=True
像:
output = subprocess.check_output(command, shell=True)
查找关于drozer命令等更多信息http://th3-incognito-guy.blogspot.in/2014/09/drozer-security-attack-framework-for.html
文章来源: why are '(single quote) or \"(double quote) not allowed in subprocess.check_output() in python?