Python在保留顺序的同时分别从子进程stdout和stderr中读取

Python在保留顺序的同时分别从子进程stdout和stderr中读取,第1张

Python在保留顺序的同时分别从子进程stdout和stderr中读取

这是一种基于的解决方案

selectors
,但可以保留顺序,并流式传输可变长度字符(甚至是单个字符)。

诀窍是使用

read1()
而不是
read()

import selectorsimport subprocessimport sysp = subprocess.Popen(    ["python", "random_out.py"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)sel = selectors.DefaultSelector()sel.register(p.stdout, selectors.EVENT_READ)sel.register(p.stderr, selectors.EVENT_READ)while True:    for key, _ in sel.select():        data = key.fileobj.read1().depre()        if not data: exit()        if key.fileobj is p.stdout: print(data, end="")        else: print(data, end="", file=sys.stderr)

如果您需要测试程序,请使用它。

import sysfrom time import sleepfor i in range(10):    print(f" x{i} ", file=sys.stderr, end="")    sleep(0.1)    print(f" y{i} ", end="")    sleep(0.1)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5664030.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存