Я пытаюсь выполнить команду следующим образом, но это STUCK в блоке try
, как показано ниже, до тех пор, пока не начнется таймаут, скрипт python отлично выполнит самостоятельно самостоятельно, может кто-нибудь предположить, почему это так и как отладить это?subprocess.Popen выполнение скрипта stuck
cmd = "python complete.py"
proc = subprocess.Popen(cmd.split(' '),stdout=subprocess.PIPE)
print "Executing %s"%cmd
try:
print "In try" **//Stuck here**
proc.wait(timeout=time_out)
except TimeoutExpired as e:
print e
proc.kill()
with proc.stdout as stdout:
for line in stdout:
print line,
Зависит от деталей команды, но наиболее вероятной проблемой является то, что она сидит вокруг, пытаясь записать ее на стандартный вывод (но не может, потому что вы не читаете с другого конца конвейера). –
Вот почему документы явно рекомендуют вам использовать '.communicate()', особенно если вы перенаправили stdout или stderr. –
@Owen, я не согласен с тем, что это обман этого конкретного вопроса - они не называют 'stdout.read()' здесь. Если бы они были, у них не было бы этой ошибки. (Теперь, если они перенаправляют stderr на отдельный FIFO, но только чтение из stdout, * then * они вернутся в эту позицию, но это не так). –