3

他のスクリプトの実行を担当する python スクリプトを作成しました。ときどき、機能していないプロセスが表示されることに気付きます。

.communicate私は StackOverFlow に関する他のスレッドをいくつか読んでいましたが、使用されていない場合でも問題が発生する可能性があるとのこと.callでした。

私が今苦労しているのは、プロセスの終了コードも取得する必要があるということだけです。

私のコードは以下です。

job.append("py")
job.append("\tmp\test\sleep.py")
job.append("20")
p = subprocess.Popen(job, stderr=subprocess.PIPE,stdout=subprocess.PIPE)
exit_code_main = p.wait()

サブプロセスの実行からすべての出力を取得する必要があり、エラー出力がある場合はそれを取得する必要があります。終了コードは、サブプロセス内のスクリプトが正常に実行されたかどうかを判断するために使用するものです。

4

2 に答える 2

2

を使用して stdout、stderr、および終了コードをキャプチャする方法の例を次に示しますsubprocess

    p = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
    stdout, stderr = p.communicate()

    logger.info("Executed notification script %s, exit code %d", args, p.returncode)
    logger.info("stdout: %s", stdout)
    logger.info("stderr: %s", stderr)

    if p.returncode != 0:
        raise RuntimeError("The script did not exit cleanly: {}".format(args))
于 2015-04-27T14:15:27.663 に答える
1

check_output を使用して、ゼロ以外の終了ステータスをキャッチできます。

from subprocess import check_output, CalledProcessError
try:
    out = check_output(job)
except CalledProcessError as e:
    print(e.returncode)
    print(e.message)
else:
    print(out)
于 2015-04-27T14:19:37.053 に答える