这是一种基于的解决方案
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)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)