繁体   English   中英

Python,子进程,管道和选择

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM