Python 子进程?

2 投票
3 回答
3096 浏览
提问于 2025-04-17 06:16

我觉得我可能在重复这个问题,但我没有找到任何一个答案符合我的需求。请原谅我的无知。

我有一个程序在运行,它不断地从服务器输出一些二进制数据。这个程序不会停止,直到被强制结束。

我想把它放在一个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

撰写回答