subprocess.Popen を介して起動され、subprocess.PIPE を介して接続された他のプログラムの出力を継続的に読み取る python プログラムがあります。
私が直面している問題は、起動したプログラムからの出力のかなりの部分が時々失われることです。
たとえば、パイプを介して inotify イベントを監視すると、inotifywait
多くのイベントが失われます。
これは関連する機能です:
process = subprocess.Popen(["inotifywait", "-q", "-r", "-m", "--format", "%e:::::%w%f", srcroot], stdout=subprocess.PIPE, stderr=subprocess.PIPE) ポーリング = select.poll() polling.register(プロセス.stdout) process.stdout.flush() True の間: process.stdout.flush() polling.poll(max_seconds*1000) の場合: 行 = process.stdout.readline() len(行) > 0 の場合: 印刷行[:-1]
コマンドinotifywait -q -r -m --format %e:::::%w%f /opt/fileserver/ > /tmp/log1
を実行し、(inotify イベントを生成するために) ファイルを移動すると、8000 行を超えるファイルが生成されます。一方、my を使用./pscript.py > /tmp/log2
すると、約 5000 行のファイルが得られます。