Ho un programma interattivo chiamato my_own_exe
. Innanzitutto, stampa alive
, quindi immette S\n
e quindi stampa nuovamente alive
. Infine, inserisci L\n
. Funziona ed esce.perché python.subprocess si blocca dopo proc.communicate()?
Tuttavia, quando lo chiamo dal seguente script python, il programma sembrava bloccarsi dopo aver stampato il primo 'vivo'.
Qualcuno può dirmi perché questo sta accadendo?
// dopo aver letto le follow up (grazie ragazzi), ho modificato il codice come segue:
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)
il programma ora va bene con il primo ingresso 'S \ n', ma poi si fermò, e io il secondo 'L \ n' è un po 'ignorato.
Qualcuno può darmi un'idea del perché è così?
Il processo non viene riavviato ogni volta che chiama 'proc2'? O non lo chiama da quando ha stampato di fronte a due di loro? E se questo è il caso, perché è il congelamento dopo la prima stampa e non la seconda? – Anthony
@Anthony: No. Il processo non viene riavviato. Si sta congelando dopo la prima stampa perché 'communicate' sta aspettando che il processo finisca, ma il processo non finisce mai perché è probabilmente bloccato sul secondo prompt (quello in cui' 'L \ n'' deve essere inserito). – nosklo
grazie. comunque, questo risolve solo parzialmente il problema, posso usare comunicare una sola volta, corretto? se ho bisogno di leggere, scrivere, leggere e scrivere INTERATTIVAMENTE, questo "output = p.communicate ('S \ nL \ n') [0]" non funziona, corretto? –