【发布时间】:2021-01-18 08:43:37
【问题描述】:
我尝试使用 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
如何从行中获取每个单词?
【问题讨论】:
-
p.stdout是一个io.BytesIO 对象;从语法上讲,您可以随意读取它,就好像它是一个文件一样。您可能还想根据需要查看bufsize参数。 -
@YiFei 我尝试迭代一行中的每个单词,但输出出乎意料。我已经更新了我的问题,你能看看吗?
-
@YiFei 我还是想不通。您能否展示如何实时读取 p.stdout?
标签: python python-3.x shell subprocess