Szy*_*ski 0 python subprocess argparse
我在文件'bin/test'中有一个简单的python脚本:
#!/usr/bin/env python
import argparse
PROGRAM_NAME = "name"
PROGRAM_VERSION = "0.0.1"
PROGRAM_DESCRIPTION = "desc"
parser = argparse.ArgumentParser(prog=PROGRAM_NAME, description=PROGRAM_DESCRIPTION)
parser.add_argument('--version', action='version', version='%(prog)s ' + PROGRAM_VERSION)
args = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)
当我用--versionparam 运行它,或者--help,它打印一切OK:
$ bin/test --version
name 0.0.1
$ bin/test --help
usage: name [-h] [--version]
desc
optional arguments:
-h, --help show this help message and exit
--version show program's version number and exit
Run Code Online (Sandbox Code Playgroud)
当我使用文件运行时subprocess.check_output,它没有得到任何东西:
>>> subprocess.check_output(["bin/test", "--help"], stderr=subprocess.STDOUT, shell=True)
''
>>> subprocess.check_output(["bin/test", "--version"], stderr=subprocess.STDOUT, shell=True)
''
Run Code Online (Sandbox Code Playgroud)
我正在使用带有Python版本的Ubuntu 11.10:
python --version
Python 2.7.1+
Run Code Online (Sandbox Code Playgroud)
我需要在测试中获取脚本输出.我该怎么办?
如果您正在使用shell=True,请不要将程序及其参数作为列表传递.这有效:
subprocess.check_output("bin/test --help", stderr=subprocess.STDOUT, shell=True)
Run Code Online (Sandbox Code Playgroud)
编辑:当然,留下shell的False将有太多的工作.
Edit2:文档解释了原因
在Unix上,shell = True:如果args是一个字符串,它指定要通过shell执行的命令字符串.这意味着字符串的格式必须与在shell提示符下键入时完全相同.这包括,例如,引用或反斜杠转义带有空格的文件名.如果args是一个序列,则第一个项指定命令字符串,并且任何其他项将被视为shell本身的附加参数.
| 归档时间: |
|
| 查看次数: |
1892 次 |
| 最近记录: |