Попробуйте добавить stdin=subprocess.PIPE
к вашему Popen
вызову:
Popen(..., stdin=subprocess.PIPE, ...)
По умолчанию Popen
наследует файловые дескрипторы своего родителя , включая stdin
. Вы явно даете ему новые stdout
и stderr
, но не новый stdin
, который он поэтому наследует от вашего основного процесса Python. Я предполагаю, что stdin
захватывается дочерним процессом (даже если этот процесс не нуждается в этом), предотвращая ваш вызов на raw_input
от получения ввода и возврата до тех пор, пока процесс Popen
не завершится и не вернет управление stdin
.
Если процесс может попытаться прочитать из stdin
, и вы не планируете что-либо записывать в этот канал, вы также можете сделать так, чтобы он рисовал из /dev/null
(в linux), используя что-то вроде:
Popen(..., stdin=open('/dev/null', 'rb').fileno(), ...)
Это позволило бы (не) читать со стандартного ввода без зависания.