(目前使用python 3.2)
我需要能够:
我玩过子进程管道以及在bash中进行奇怪的管道重定向,以及使用tee
,但是还没有找到任何可行的东西。这是可能的吗?
答案 0 :(得分:1)
我的解决方案:
import subprocess
process = subprocess.Popen("my command", shell=True,
stdout=None, # print to terminal
stderr=subprocess.PIPE)
duplicator = subprocess.Popen("tee /dev/stderr", shell=True, # duplicate input stream
stdin=process.stderr,
stdout=subprocess.PIPE, # catch error stream of first process
stderr=None) # print to terminal
error_stream = duplicator.stdout
print('error_stream.read() = ' + error_stream.read())
答案 1 :(得分:0)
尝试这样的事情:
import os
cmd = 'for i in 1 2 3 4 5; do sleep 5; echo $i; done'
p = os.popen(cmd)
while True:
output = p.readline()
print(output)
if not output: break
在python2中,您可以使用popen3
这样轻松捕获stderr:
i, o, err = os.popen3(cmd)
但是在python3中似乎没有这样的功能。如果您没有找到解决方法,请尝试直接使用subprocess.Popen
,如下所述:http://www.saltycrane.com/blog/2009/10/how-capture-stdout-in-real-time-python/