在子进程命令中传递带双引号的参数
我在用 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"
我该如何解决这个关于引号的问题呢?
3 个回答
-1
你可以试着使用这个选项 shell=True
,像这样:
output = subprocess.check_output(command, shell=True)
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)
9
你不需要使用双引号。
在使用命令行时,需要双引号的原因是,命令行会把输入的内容当作一个字符串来解析,它用双引号来表示文本 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,))
但是当你用代码来启动一个进程时,你是明确地指定每一个参数的,这时候就不需要命令行的解析,所以也就不需要额外的引号了。