subprocess.call を使用して、Python で外部アプリケーションを実行しようとしています。私が読んだことから、Popen.waitを呼び出さない限り、subprocess.callはブロックされないはずですが、私にとっては、外部アプリケーションが終了するまでブロックされています。これを修正するにはどうすればよいですか?
質問する
6061 次
2 に答える
5
ドキュメントを間違って読んでいます。彼らによると:
subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)
argsで記述されたコマンドを実行します。コマンドが完了するのを待ってから、returncode属性を返します。
于 2013-01-09T20:56:56.363 に答える
1
のコードsubprocess
は、実際には非常にシンプルで読みやすいものです。3.3または2.7のバージョン (必要に応じて) を見るだけで、それが何をしているかがわかります。
たとえば、call
次のようになります。
def call(*popenargs, timeout=None, **kwargs):
"""Run command with arguments. Wait for command to complete or
timeout, then return the returncode attribute.
The arguments are the same as for the Popen constructor. Example:
retcode = call(["ls", "-l"])
"""
with Popen(*popenargs, **kwargs) as p:
try:
return p.wait(timeout=timeout)
except:
p.kill()
p.wait()
raise
を呼び出さなくても同じことができますwait
。を作成しPopen
、それを呼び出さないでくださいwait
。それはまさにあなたが望むものです。
于 2013-01-09T21:01:53.457 に答える