我想我可能会重复这个问题,但我没有找到任何适合我要求的答案。 原谅我的无知。
我有一个程序正在运行,它不断地从服务器中吐出一些二进制数据。它永远不会停止,直到它被杀死。
我想将它包装在 python 脚本中以读取输出并在它到达时对其进行处理。 我在堆栈溢出中尝试了一些子进程的想法,但没有用。 请提出建议。
p=subprocess.popen(args,stderr=PIPE,stdin=PIPE,stdout=PIPE,shell=FALSE)
#p.communicate#blocks forever as expected
#p.stdout.read/readlines/readline-->blocks
#select(on p.stdout.fileno())-->blocks
最好的方法是什么?
最佳答案
阅读时有长度限制:
proc = subprocess.Popen(args, stdin=None, stdout=subprocess.PIPE, stderr=None)
while True:
chunk = proc.stdout.read(1024)
# chunk is <= 1024 bytes
这是您评论中的代码,稍作修改。它对我有用:
import subprocess
class container(object):
pass
self = container()
args = ['yes', 'test ' * 10]
self.p = subprocess.Popen(args, stdin=None, stderr=None,
stdout=subprocess.PIPE, shell=False)
while True:
chunk = self.p.stdout.read(1024)
print 'printing chunk'
print chunk
关于Python子进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8117249/