У меня есть приложение Linux, которое запускается в интерактивном режиме из командной строки, используя стандартный ввод для приема команд. Я написал оболочку, используя подпроцесс для доступа к стандартному вводу, когда приложение находится в фоновом режиме. Теперь я могу отправлять ему команды с помощью p.stdin.write(command), но как мне следить за его ответами?
как мне контролировать стандартный вывод с помощью подпроцесса в python?
comment
Похоже на соответствующую ссылку: stackoverflow.com/questions/375427/
- person pyfunc   schedule 06.10.2010
Ответы (1)
Прочитайте из p.stdout
, чтобы получить доступ к выходным данным процесса.
В зависимости от того, что делает процесс, вам, возможно, придется быть осторожным, чтобы убедиться, что вы не блокируете p.stdout
, в то время как p
, в свою очередь, блокирует свой stdin
. Если вы точно знаете, что он будет выводить строку каждый раз, когда вы будете в него что-то писать, вы можете просто чередовать его в таком цикле:
while still_going:
p.stdin.write('blah\n')
print p.stdout.readline()
Однако, если вывод носит более спорадический характер, вы можете заглянуть в модуль select
, чтобы чередовать чтение и письмо более гибким образом.
person
Josh Lee
schedule
06.10.2010
У меня возникли проблемы с пониманием того, как использовать select. Знаете ли вы какие-либо примеры, которые могли бы иметь отношение к моей ситуации?
- person dpcd; 06.10.2010
@dpcd Существует несколько разных способов использования select, и это зависит от того, как структурирован ваш код, и какой из них лучше. Два основных шаблона блокируются до тех пор, пока какой-либо из этих файлов не станет доступным для записи... затем скажите мне, какие из них и не блокировать, просто скажите, доступны ли данные. Таким образом, я случайно не блокирую свой процесс, вызывая read() для файла, в котором нет готовых данных.
- person Rakis; 06.10.2010
@dpcd О, и Python
select()
- это очень тонкая оболочка стандартного POSIX select()
. Все примеры на основе C, которые вы найдете при поиске в Google select, применимы к python почти так же, как и к C (python просто возвращает списки вместо растровых изображений). Есть много примеров и руководств.
- person Rakis; 06.10.2010