これは単純なpythonの質問ですと思います。なぜ、subprocess.Popen(...)が返されないのですか?
私はPythonインタプリタで次の操作を試してください。
>>> import process
>>> def test(cmd):
... p = subprocess.Popen(cmd)
...
>>> test(['ls', '-l'])
それはls -l
を実行しますが、私は新しい>>>プロンプトを取得するには、「リターン」をヒットする必要があります。しかし
、私は次のことを試してください。
>>> import process
>>> def test(cmd):
... p = subprocess.Popen(cmd)
... p.wait()
...
>>> test(['ls', '-l'])
その後ls -l
は>>>プロンプトすぐに存在して実行されます。
もう一つのバリエーション:
>>> import process
>>> def test(cmd):
... p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
...
>>> test(['ls', '-l'])
これは私にすぐに新しいプロンプトを与えます。
最後の例は、私が欲しいものに最も近い例です。私の目標は子プロセスを起動し、それが完了するのを待ってから、親プロセスでstdoutを使用します。p.stdout
を参照し、stderrを他の場所に印刷するだけです。
実際のアプリケーションでは、 p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
には、p.wait()
の有無にかかわらず、最後のバージョンがハングアップするだけです。
おかげで、
チャーリー
サブコマンドの標準ハンドラをリダイレクトしないと、 '.communicate()'は何も役に立ちません。それを 'wait()'呼び出しで置き換えるほうがよいかもしれません。 – glglgl