2016-10-07 3 views
0

私は次のようにコマンドを実行しようとしていますが、タイムアウトが始まるまでtryブロック内にSTUCKですが、Pythonスクリプトはそれ自身で独立して実行されます。どのようにこれをデバッグするのですか?サブプロセススクリプトの実行をスクロール

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, 
+0

コマンドの詳細にもよりますが、最も一般的な問題は、stdoutに書き込もうとしていることです(ただし、パイプラインのもう一方の端から読み取っていないためできません)。 –

+1

これは、ドキュメントが '.communicate()'を使うことを明確に推奨している理由です。特に、stdoutやstderrをリダイレクトした場合は特にそうです。 –

+0

@Owen、私はこれがその特定の質問の欺瞞であることに同意しません - ここでは 'stdout.read()'と呼ばれていません。もしそうであれば、このバグはありません。 (今、stderrを別のFIFOにリダイレクトしていて、stdoutから読み込むだけであれば、それらはその位置に戻りますが、それは当てはまりません)。 –

答えて

1

proc.stdoutプロセスはを出た後読み取ることができません。代わりに、が実行されている間にを読む必要があります。 communicate()はそれを行いますが、あなたがそれを使用していないので、あなた自身でそれをやります。

今のところ、あなたのプロセスは、パイプのもう一方の端が読み込まれていないため、stdoutに書き込もうとしています。

Using module 'subprocess' with timeoutも参照してください。

関連する問題