我使用的是 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"
如何解决这个引号的问题?
你不需要双引号。
在使用 shell 命令时需要双引号的原因是 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,))
当你使用代码来启动一个进程时,你明确地指定了各个参数,并且没有进行shell解析,所以没有必要使用额外的引号。
为了解决你的问题,你需要一个能理解的拆分方法。subprocess
命令参数要求。使用 霰弹 喜欢。
>>> 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.in201409drozer-security-attack-framework-for.html。