在子进程命令中传递用双引号包裹的参数。

问题描述 投票:2回答:4

我使用的是 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"

如何解决这个引号的问题?

python shell subprocess
4个回答
6
投票

你不需要双引号。

在使用 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解析,所以没有必要使用额外的引号。


1
投票

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

0
投票

你可以尝试使用选项 shell=True 喜欢。

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

-3
投票

查找更多关于drozer命令的信息,以及更多关于... http:/th3-incognito-guy.blogspot.in201409drozer-security-attack-framework-for.html。

© www.soinside.com 2019 - 2024. All rights reserved.