如何从subprocess.Popen()获取输出. proc.stdout.readline()块,没有数据打印出来 [英] How to get output from subprocess.Popen(). proc.stdout.readline() blocks, no data prints out
本文介绍了如何从subprocess.Popen()获取输出. proc.stdout.readline()块,没有数据打印出来的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我要从execute Test_Pipe.py执行输出,我在Linux上尝试了以下代码,但没有用.
I want output from execute Test_Pipe.py, I tried following code on Linux but it did not work.
Test_Pipe.py
import time
while True :
print "Someting ..."
time.sleep(.1)
Caller.py
import subprocess as subp
import time
proc = subp.Popen(["python", "Test_Pipe.py"], stdout=subp.PIPE, stdin=subp.PIPE)
while True :
data = proc.stdout.readline() #block / wait
print data
time.sleep(.1)
proc.stdout.readline()
行被阻塞,因此没有数据打印出来.
The line proc.stdout.readline()
was blocked, so no data prints out.
推荐答案
您显然可以使用subprocess.communicate,但我认为您正在寻找实时输入和输出.
You obviously can use subprocess.communicate but I think you are looking for real time input and output.
readline被阻止,因为该进程可能正在等待您的输入.您可以逐个字符地阅读以克服这种情况,如下所示:
readline was blocked because the process is probably waiting on your input. You can read character by character to overcome this like the following:
import subprocess
import sys
process = subprocess.Popen(
cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE
)
while True:
out = process.stdout.read(1)
if out == '' and process.poll() != None:
break
if out != '':
sys.stdout.write(out)
sys.stdout.flush()
这篇关于如何从subprocess.Popen()获取输出. proc.stdout.readline()块,没有数据打印出来的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文