我有一个 python 程序,我在其中不断读取通过 subprocess.Popen 启动并通过 subprocess.PIPE 连接的其他程序的输出
我面临的问题是它有时会丢失已启动程序的大部分输出。
例如,通过管道监视 inotify 事件以inotifywait
丢失许多事件。
这是相关的功能:
进程 = subprocess.Popen(["inotifywait", "-q", "-r", "-m", "--format", "%e:::::%w%f", srcroot], stdout=subprocess.PIPE, stderr=subprocess.PIPE) 轮询 = select.poll() polling.register(process.stdout) process.stdout.flush() 而真: process.stdout.flush() 如果 polling.poll(max_seconds*1000): line = process.stdout.readline() 如果长度(线)> 0: 打印行[:-1]
执行命令inotifywait -q -r -m --format %e:::::%w%f /opt/fileserver/ > /tmp/log1
并移动一些文件(以生成 inotify 事件)给出一个 >8000 行文件。另一方面,使用我./pscript.py > /tmp/log2
给出的文件大约有 5000 行。