子过程输出到PIPE并直接输出到stdout
我发现了一些类似于我的问题,但没有提供我可以使用的解决方案(最接近的是:子过程输出到标准输出和PIPE)
问题:我想使用需要很长时间的子进程启动一个进程。 运行命令后,我需要解析stdout-output和stderr-output。
目前我做如下:
p = subprocess.Popen( command_list, stdout=subprocess.PIPE,
stderr=subprocess.PIPE )
out, error_msg = p.communicate()
print out + "nn" + error_msg
#next comes code in which I check out and error_msg
但是这种方法的缺点是用户在运行时没有看到进程的输出。 只有在输出结束时才打印。
有没有办法在命令运行时打印输出(就像我没有执行stdout / stderr = subprocess.PIPE命令一样),并且最终还是通过p.communicate输出输出?
注意:我目前正在开发Python 2.5(使用此Python版本的旧软件版本)。
这段代码曾经帮助我处理过类似的情况:
process = subprocess.Popen(cmd, bufsize=1, universal_newlines=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
for line in iter(process.stdout.readline, ''):
print line,
sys.stdout.flush() # please see comments regarding the necessity of this line
process.wait()
errcode = process.returncode
使用| tee
| tee
import subprocess
# Run command and redirect it by | tee to a file named out.txt
p = subprocess.Popen([command, '|', 'tee', 'out.txt'])
p.wait()
# Get standard output
f = open('out.txt')
out = f.read()
f.close()
print out
在Windows平台上,没有| tee
| tee
。 我们需要使用Powershell。 所以第三行的命令变成:
# Run command in PowerShell and redirect it by | tee to a file named out.txt
p = subprocess.Popen(['powershell','command, '|', 'tee', 'out.txt'])
通过这种方式,打印输出并且输出也将被存储在输出中。
链接地址: http://www.djcxy.com/p/13481.html上一篇: Output of subprocess both to PIPE and directly to stdout