我正在尝试使用shell命令运行的程序,每秒输出一个单词。我正在尝试在Python脚本中执行shell命令,并实时输出每个输出的单词。我在网上找到的所有其他解决方案实际上并没有打印实时输出,而是一次打印了一条终点线。我想获得 real 实时输出,其中每个单词都是实时打印出来的,而不是每一行。这是我尝试过的代码:
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
如何从行中得到每个单词?
答案 0 :(得分:1)
这是一种实现方法,它在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)