为什么在python中的subprocess.check_output()中不允许'(单引号)或"(双引号)?

v1h*_*1h5 1 python subprocess

我正在使用subprocess.check_output()方法从python脚本中执行命令.

有一些命令需要在语法中出现"(双引号).这是一个例子:

>drozer console connect -c "run app.package.info -a com.package.name"
Run Code Online (Sandbox Code Playgroud)

如果我们从上面的命令中删除"(双引号)",它会抛出错误.

我做了以下事情:

string = '\"run app.package.info -a com.package.name\"'
command = ['/usr/bin/drozer','console','connect','-c',string]
output = subprocess.check_output(command)
Run Code Online (Sandbox Code Playgroud)

这让我错误:

*** Unknown syntax: "run app.package.info  -a com.package.name"
Run Code Online (Sandbox Code Playgroud)

请注意:没有引号的命令正在通过subprocess.check_output运行,因此代码可以正常工作.

我怎样才能解决这个引号问题?任何帮助将受到高度赞赏.

谢谢

ala*_*air 5

你不需要双引号.

使用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,))
Run Code Online (Sandbox Code Playgroud)

当您使用代码启动进程时,您明确指定了各个参数,并且没有进行shell解析,因此不需要额外的引号.

  • @v1h5,“给出错误”不够清楚,我们无法提供太多帮助——指定您运行的确切内容以及确切的错误。这个答案确实是最佳实践方法,与 shell 在您提供的命令行中所做的相同。 (2认同)