是否有类似Python子流程的调用,它接受stdin输入字符串并返回stderr,stdout和返回代码?

Mic*_*lot 5 python subprocess python-2.7

根据主题,是否有一个标准的Python 2.7库调用,我可以这样使用:

(returncode, stdout, stderr) = invoke_subprocess(args, stdin)
Run Code Online (Sandbox Code Playgroud)

问题是我想要所有三种形式的输出:返回代码和stdout和stderr的整个(和单独的)内容.我希望在子进程模块中找到类似的东西,但是我能看到的最接近的是subprocess.check_output,它给出了三分之二(returncode和stdout).

堆栈溢出还有其他一些问题,建议将stder输入stdout,但我需要将它们分开,因为我正在使用Python来驱动某些非Python应用程序的测试,我试图区分哪些输出显示在哪些流上.例如,我想验证人类可读的错误消息是否显示在stderr中,但是只有机器可解析的输出数据显示在stdout上.

我想我想要的是一个简单的四线...

def method(args, input):
    from subprocess import Popen, PIPE
    p = Popen(args, stdin=PIPE, stdout=PIPE, stderr=PIPE)
    out, err = p.communicate(input)
    return (p.poll(), out, err)
Run Code Online (Sandbox Code Playgroud)

...所以我有点惊讶的是,由于模块中大部分与此类似的其他方法的数量,还没有这样的方法subprocess.它是否存在而我是否缺少它,或者它存在于某些其他标准Python 2.7模块中的哪个位置?或者有一个微妙的原因,为什么这样的方法是一个坏主意?

Amb*_*ber 3

它不存在,因为这就是subprocess.Popen设计的目的。其他功能主要是为了支持直接替换os.system和常见的简单自动化案例。试图用一行语句覆盖每个用例会导致一组更加臃肿的功能。

另请注意,您可以使用p.returncode而不是p.poll(). 它保证在返回时已设置p.communicate(...)