У меня есть интерактивная программа под названием my_own_exe
. Сначала он печатает alive
, затем вы вводите S\n
, а затем снова распечатываете alive
. Наконец, вы вводите L\n
. Он выполняет некоторую обработку и завершает работу.Почему python.subprocess зависает после proc.communicate()?
Однако, когда я называю это из следующего сценария python, программа, похоже, зависала после распечатки первого «живого».
Может ли кто-нибудь здесь сказать мне, почему это происходит?
// после прочтения последующих взлетов (спасибо ребят), я изменил код следующим образом:
import subprocess
import time
base_command = "./AO_FelixStrategy_UnitTest --bats 31441 --chix 12467 --enxutp 31884 --turq 26372 --symbol SOGN --target_date " + '2009-Oct-16'
print base_command
proc2 = subprocess.Popen(base_command, shell=True , stdin=subprocess.PIPE,)
time.sleep(2);
print "aliv"
proc2.communicate('S\n')
print "alive"
time.sleep(6)
print "alive"
print proc2.communicate('L\n')
time.sleep(6)
теперь программа идет хорошо с первым вводом «S \ п», но затем остановился, и I второй «L \ n» игнорируется.
Может ли кто-нибудь дать мне представление, почему это так?
Не перезагружается ли процесс каждый раз, когда он называет 'proc2'? Или не звонит, так как он печатает перед двумя из них? И если это так, то почему замораживание после первого отпечатка, а не второе? – Anthony
@ Энтони: Нет. Процесс не восстанавливается. Он замерзает после первой печати, потому что «сообщение» ожидает завершения процесса, но процесс никогда не заканчивается, потому что он, вероятно, застревает во втором приглашении (тот, где нужно ввести «L \ n''). – nosklo
спасибо. во всяком случае, это только частично решает проблему, я могу использовать общаться только один раз, правильно? если мне нужно ИНТЕРАКТИВНО читать и писать, читать и писать, этот «output = p.communicate (« S \ nL \ n ») [0]« не может работать, правильно? –