Python子进程?

标签 python subprocess

我想我可能会重复这个问题,但我没有找到任何适合我要求的答案。 原谅我的无知。

我有一个程序正在运行,它不断地从服务器中吐出一些二进制数据。它永远不会停止,直到它被杀死。

我想将它包装在 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/

相关文章:

python - 使用 ctypes 时 islower 结果不正确

python - Websocket在Python中下载实时数据

python - subprocess.check_output 更快的方法

python - 如何 fork 并执行服务器并等待它准备好?

python创建名为temporaryfile的临时文件并在其上调用子进程

python - 如何使用 Python 在后台运行 DOS 批处理文件?

python - 如何使用逐元素数据框操作?

python - 替换所有以某个前缀开头的字符串

python - 使用 python 和 networkx 进行大图可视化

Python。 subprocess.Popen 的第二步截断第一步的结果