如何捕获子进程外的子进程输出

时间:2017-10-08 15:34:04

标签: python subprocess

我需要实现这个目标:

ai - bi

我无法修改def x(): subprocess.Popen(...) 但是我需要在x()内部调用stderr / stdout

我需要类似的东西:

Popen

......或类似的东西。

3 个答案:

答案 0 :(得分:0)

从你的x函数返回popen对象,然后从你的调用者文件中访问他,如下所示:

def x():
     return subprocess.Popen(...)


p= x()

print p.stdout
print p.stderr
print p.returncode

等......

答案 1 :(得分:0)

没有直接而简单的方法。您必须从另一个线程确定子进程的PID并弄乱其UNIX文件描述符。乱。

答案 2 :(得分:0)

正弦

  

...我需要达到(压制)stderr / stdout ...

您是否尝试过此处描述的方法Silence the stdout of a function in Python without trashing sys.stdout and restoring each function call

在你的情况下,它可能类似于

import io
import sys

save_stdout = sys.stdout


suppress_stdout():
    try:
        sys.stdout = io.BytesIO()
        x()
    finally:
        sys.stdout = save_stdout