使用子进程模块(Python 2.7),我运行命令并尝试在运行时处理其输出。
我的代码如下:
process = subprocess.Popen(
['udevadm', 'monitor', '--subsystem=usb', '--property'],
stdout=subprocess.PIPE)
for line in iter(process.stdout.readline, ''):
print(line)
但是,输出仅在我按Ctrl + C后打印,即使我在print语句后添加sys.stdout.flush()
。
为什么会发生这种情况,我如何实现此流程的输出?
值得注意的是,这个udevadm monitor
命令并不打算终止,所以我不能等待进程一次性终止并处理它的输出。
我找到live output from subprocess command,但接受的答案中的方法并没有解决我的问题。
答案 0 :(得分:1)
您可以使用unbuffer:
process = subprocess.Popen(
["unbuffer", 'udevadm', 'monitor', '--subsystem=usb', '--property'],
stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
for line in iter(process.stdout.readline, ''):
print(line)