2017-10-08 61 views
0

外需來實現這一點:我如何捕捉子輸出的子

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

我不能修改x()但我需要達到(抑制)Popen調用內部的stderr/stdout

我需要這樣的東西:

with suppress_subprocess: 
x() 

...或者類似的東西。從你的X功能

+0

https://stackoverflow.com/questions/10683184/piping-popen-stderr-and-stdout –

+0

看一看蟒蛇裝飾@vpas –

+0

請給我更多的幫助,並請注意x()函數的內部不能被修改! – vpas

回答

0

回報POPEN對象,然後就進入了他從來電者的文件,像這樣:

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


p= x() 

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

等....

+0

正如我所說:x()函數不能被修改,假設它是第三方代碼。 – vpas

0

沒有直接而簡便的方法。您將不得不從另一個線程確定子進程的PID並弄亂它的UNIX文件描述符。亂。

+0

當你找到PID的時候,已經太晚了:你正在用第一個輸出進行比賽。 –

+0

同意。這不是一個好方法,但它是一種方式。 –