多くの出力を生成するコマンドラインを実行するときに、サブプロセス、サブプロセス、またはサブプロセスを使用すると問題が発生します。奇妙なことに、しばらく待ってから、スクリプトがぶら下がっている状態で、cmd行でコマンドされたジョブが完了し、スクリプトだけがハングアップしていることがわかりました。Python:subprocess.Popenとsubprocess.callがハングします
subprocess.call(cmd, shell = True)
#OR
subprocess.Popen(cmd, stdout = subprocess.PIPE, stdin = subprocess.PIPE, shell = True)
# HANGS HERE
print "show something after subprocess"
最後の印刷は実行されませんが、実際にはcmdが実行されています。
また、cmdはシリアルポートに関連しているので、シリアルケーブルを抜くとすべてが正常になり、最後のprintetetementが実行されます。しかし、私がターミナルを使用するときは、シリアルが接続されていてもすべてがうまくいけば、それはpythonスクリプトでのみ発生します。
どうもありがとうPythonドキュメントによると
OPがそうでない 'subprocess.PIPE'を使わない場合、' subprocess.call'を使っても問題ありません。 – interjay
'print'ステートメントの出力が親に表示されない理由は説明しません。 'Popen()'は、フルバッファでパイプに書き込むために子プロセスがブロックされていても、子プロセスを待つことはありません。 – jfs