[英]How to get realtime Python subprocess output?
我尝试使用 shell 命令运行的程序每秒输出一个单词。 我正在尝试在 Python 脚本中执行 shell 命令,并在输出的每个单词上获取实时输出。 我在网上找到的所有其他解决方案实际上并没有打印实时输出,而是在当时打印了一个完成的行。 我想真正的实时输出,其中每个字是打印出来的实时,而不是每一行。 这是我试过的代码:
cmd=['slowprogram','-m', '15', '-l', '50']
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, bufsize=1)
for line in iter(p.stdout.readline, b''):
print(line),
p.stdout.close()
p.wait()
它等待直到一行完成并打印它。 有没有办法实时获取更新并打印一行中的每个单词?
更新:
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, bufsize=1)
for line in iter(p.stdout.readline, b''):
for word in iter(line):
print(word)
p.stdout.close()
p.wait()
由于某种原因返回一堆数字......:
111
117
108
100
32
104
97
118
101
32
115
97
如何从行中获取每个单词?
这是一种方法,它在 Linux shell 中对我有用。 它使用一个无缓冲的 IO 对象并一次打印出一个字符。 我很确定有更好的方法,因为我不是subprocess
或事件处理方面的专家。 您可能还想查看asyncio
。
with subprocess.Popen(cmd, stdout=subprocess.PIPE, bufsize=0) as p:
char = p.stdout.read(1)
while char != b'':
print(char.decode('UTF-8'), end='', flush=True)
char = p.stdout.read(1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.