【发布时间】:2015-10-24 12:06:44
【问题描述】:
我有一个 python 程序,我在其中不断读取通过 subprocess.Popen 启动并通过 subprocess.PIPE 连接的其他程序的输出
我面临的问题是它有时会丢失已启动程序的大部分输出。
例如,通过管道监控到 inotifywait 的 inotify 事件会丢失许多事件。
这是相关函数:
进程 = 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 行的文件。
【问题讨论】:
-
尝试从 stderr 获取线路,然后打印,检查丢失的数据是否真的存在。 -
print process.stderr.read() -
不幸的是,上面的示例有些简化,因为我已经在检查 stderr。还是谢谢你。
标签: python inotifywait