Python - 从长时间运行的子进程读取输出
使用子进程模块(Python 2.7),我正在运行一个命令并尝试在运行时处理其输出。Python - 从长时间运行的子进程读取输出
我有类似下面的代码:
process = subprocess.Popen(
['udevadm', 'monitor', '--subsystem=usb', '--property'],
stdout=subprocess.PIPE)
for line in iter(process.stdout.readline, ''):
print(line)
然而,只输出被打印后,我按Ctrl + C,即使我在打印语句后添加sys.stdout.flush()
。
为什么会发生这种情况,我该如何直播这个过程的输出?
值得注意的是,这个udevadm monitor
命令不打算终止,所以我不能简单地等待进程终止并一次处理其输出。
我发现live output from subprocess command但接受的答案中的方法并没有解决我的问题。
你可以使用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)
谢谢!这工作。但有没有办法只用Python来做到这一点?我宁愿避免“expect”依赖。 –
不幸的是,我不能看到一种方式,但肯定并不意味着没有,我确实看到一些输出,如果我断开并重新连接到使用端口的东西,但大块比行缓冲,仍然在输出之间的体面延迟 –
参见[段落是开头的联系:“如果子标准输出采用的是块缓冲”(http://stackoverflow.com/a/17698359/ 4279) – jfs