外需來實現這一點:我如何捕捉子輸出的子
def x():
subprocess.Popen(...)
我不能修改x()
但我需要達到(抑制)Popen
調用內部的stderr
/stdout
。
我需要這樣的東西:
with suppress_subprocess:
x()
...或者類似的東西。從你的X功能
外需來實現這一點:我如何捕捉子輸出的子
def x():
subprocess.Popen(...)
我不能修改x()
但我需要達到(抑制)Popen
調用內部的stderr
/stdout
。
我需要這樣的東西:
with suppress_subprocess:
x()
...或者類似的東西。從你的X功能
回報POPEN對象,然後就進入了他從來電者的文件,像這樣:
def x():
return subprocess.Popen(...)
p= x()
print p.stdout
print p.stderr
print p.returncode
等....
正如我所說:x()函數不能被修改,假設它是第三方代碼。 – vpas
沒有直接而簡便的方法。您將不得不從另一個線程確定子進程的PID並弄亂它的UNIX文件描述符。亂。
當你找到PID的時候,已經太晚了:你正在用第一個輸出進行比賽。 –
同意。這不是一個好方法,但它是一種方式。 –
正弦
...我需要達到(抑制)
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
你必須操縱實際的文件描述符。 –
https://stackoverflow.com/questions/10683184/piping-popen-stderr-and-stdout –
看一看蟒蛇裝飾@vpas –
請給我更多的幫助,並請注意x()函數的內部不能被修改! – vpas