Очень этим озадачен. При использовании Popen, если используется только stdout или stderr, работает следующий код:
def run(self):
self.externalProcess = subprocess.Popen(['./external_process.out 1>&2'], shell=True, stderr=subprocess.PIPE)
while self.externalBinary.poll() is None:
print('Still running')
print('Done running')
Я использую дескриптор файла stderr, потому что я отслеживаю вывод процесса в реальном времени в графическом интерфейсе пользователя, а stderr не буферизуется. См. Другой мой вопрос для получения дополнительной информации об этом беспорядке: Python захватывает стандартный вывод из подпроцесса построчно
Проблема, с которой я столкнулся, заключается в том, что как только я добавляю stdin, чтобы разрешить передачу пользовательского ввода внешнему процессу, он начинает действовать так, как будто stdout снова буферизуется:
def run(self):
self.externalProcess = subprocess.Popen(['./external_process.out 1>&2'], shell=True, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
while self.externalBinary.poll() is None:
print('Still running')
print('Done running')
У меня вопрос: почему stdin влияет на stdout и stderr?
stdout=STDERR
, например? - person jwd   schedule 03.10.2011