У меня есть программа питона, где я постоянно читать вывод другой программы, запущенные с помощью subprocess.Popen и подключенной через subprocess.PIPEPython, подпроцесс, труба и выберите
Проблемы я столкнулся в том, что он когда-то значительно потерял часть выхода из запущенной программы.
Например, монитор для событий inotify через трубу до inotifywait
теряет много событий.
Это соответствующие функции:
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, а также распечатайте это, проверьте, действительно ли потерянные данные там. - 'print process.stderr.read()' –
К сожалению, приведенный выше пример был несколько упрощен, так как я уже проверял stderr. В любом случае, спасибо. – shodanshok