7

subprocess.call を使用して、Python で外部アプリケーションを実行しようとしています。私が読んだことから、Popen.waitを呼び出さない限り、subprocess.callはブロックされないはずですが、私にとっては、外部アプリケーションが終了するまでブロックされています。これを修正するにはどうすればよいですか?

4

2 に答える 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 に答える