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



我需要实现这个:

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

我无法修改x()但是我需要达到(抑制)stderr/stdout内部Popen呼叫。

我需要这样的东西:

with suppress_subprocess:
 x()

。或类似的东西。

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

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

p= x()
print p.stdout
print p.stderr
print p.returncode

等。。。。

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

正弦

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

您是否尝试过此处描述的方法,即在 Python 中静默函数的 stdout,而无需丢弃 sys.stdout 并恢复每个函数调用?

在您的情况下,它可以是这样的

import io
import sys
save_stdout = sys.stdout

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

最新更新