[英]Python, subprocess, pipe and select
我有一个python程序,在其中我连续读取通过subprocess.Popen启动并通过subprocess.PIPE连接的其他程序的输出
我面临的问题是,它有时会丢失已启动程序的大部分输出。
例如,通过管道通过inotifywait
监视inotify事件会丢失许多事件。
这是相关的功能:
process = subprocess.Popen(["inotifywait", "-q", "-r", "-m", "--format", "%e:::::%w%f", srcroot], stdout=subprocess.PIPE, stderr=subprocess.PIPE) polling = select.poll() polling.register(process.stdout) process.stdout.flush() while True: process.stdout.flush() if polling.poll(max_seconds*1000): line = process.stdout.readline() if len(line) > 0: print line[:-1]
执行命令inotifywait -q -r -m --format %e:::::%w%f /opt/fileserver/ > /tmp/log1
并移动一些文件(以生成inotify事件),给出> 8000行文件。 另一方面,使用我的./pscript.py > /tmp/log2
给出一个大约5000行的文件。
您在示例中完全忽略了stderr。 尝试创建如下过程:
process = subprocess.Popen(["inotifywait", "-q", "-r", "-m",
"--format", "%e:::::%w%f", srcroot], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
此外,我将直接在其Python 绑定之一中使用inotify,而不是使用inotifywait生成一个进程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.