为什么“(单引号)或\“(双引号)不subprocess.check_output()在python

2019-10-19 12:02发布

我使用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运行,所以代码工作正常。

我该如何解决报价这个问题呢? 任何帮助将高度赞赏。

谢谢

Answer 1:

你不需要双引号。

你需要他们用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,))

当你使用代码来启动一个进程,您明确指定个别的论点,并没有壳解析是怎么回事,所以没有必要额外的报价。



Answer 2:

为了解决你的问题,你需要一个理解分裂法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)


Answer 3:

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

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


Answer 4:

查找关于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?