【问题标题】:Getting output from Python script in Python tests在 Python 测试中从 Python 脚本获取输出
【发布时间】:2012-02-24 03:04:06
【问题描述】:

我在文件 '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()

当我使用--version 参数或--help 运行它时,它会打印一切正常:

$ 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

当我使用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)
''

我正在使用带有 Python 版本的 Ubuntu 11.10:

python --version
Python 2.7.1+

我需要在测试中获取脚本输出。我该怎么做?

【问题讨论】:

  • 不知道是不是这个原因,但--help和--version之前不应该有空格
  • 感谢您的想法,我已经检查过了 - 没有区别,无论输出的空格仍然是空的。我还删除了问题中的空格。

标签: python subprocess argparse


【解决方案1】:

如果您使用shell=True,请不要将程序及其参数作为列表传递。这有效:

subprocess.check_output("bin/test --help",  stderr=subprocess.STDOUT, shell=True)

编辑:当然,将shell 保留为False 也可以。

Edit2:文档解释了原因

在 Unix 上,使用 shell=True:如果 args 是一个字符串,它指定 要通过 shell 执行的命令字符串。这意味着 字符串的格式必须与在 外壳提示符。这包括,例如,引用或反斜杠 转义带有空格的文件名。如果 args 是一个序列,则 第一项指定命令字符串,任何其他项将 被视为 shell 本身的附加参数。

【讨论】:

    猜你喜欢
    • 2020-09-21
    • 1970-01-01
    • 2017-11-07
    • 2012-02-01
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    相关资源
    最近更新 更多