Python - 从长时间运行的子进程

时间:2016-04-26 21:41:00

标签: python subprocess

使用子进程模块(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,但接受的答案中的方法并没有解决我的问题。

1 个答案:

答案 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)