Как мне прочитать все в настоящее время в трубе subprocess.stdout и затем вернуться - PullRequest
1 голос
/ 22 июля 2009

Я использую модуль подпроцесса python для взаимодействия с программой через каналы stdin и stdout. Если я вызываю подпроцесс readline () на stdout, он зависает, потому что ждет новой строки.

Как я могу прочитать все символы в трубе stdout экземпляра подпроцесса? Если это имеет значение, я работаю в Linux.

Ответы [ 2 ]

4 голосов
/ 22 июля 2009

У кого-то, похоже, возникла такая же проблема, вы можете увидеть соответствующее обсуждение здесь .

Если вы работаете в Linux, вы можете использовать select, чтобы дождаться ввода в стандартный вывод процесса. В качестве альтернативы вы можете изменить режим stdout процесса на неблокирование с помощью

import fcntl, os 
fcntl.fcntl(your_process.stdout, fcntl.F_SETFL, os.O_NONBLOCK)

после чего вы можете зацикливаться, используя read (), пока не встретите символ новой строки (если вы хотите обработать вывод по одной строке за раз).

2 голосов
/ 22 июля 2009

Вы должны выполнить цикл, используя read () для заданного количества символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...