Python 子进程?
我觉得我可能在重复这个问题,但我没有找到任何一个答案符合我的需求。请原谅我的无知。
我有一个程序在运行,它不断地从服务器输出一些二进制数据。这个程序不会停止,直到被强制结束。
我想把它放在一个Python脚本里,实时读取这些输出并处理它们。 我试过Stack Overflow上提到的一些子进程的想法,但都没用。请给我一些建议。
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
什么方法最好呢?
3 个回答
0
听起来你可以使用一个异步版本的子进程模块。想了解更多信息,可以看看开发者的博客。
0
你可以先把另一个程序的输出结果保存到一个文件里,然后再用Python的 f.readline() 来读取这个文件的内容。
3
带长度限制的读取:
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