11

system()Pythonプログラムを実行するための呼び出しを行うコードを使用してLinuxで作業しています。Python プログラムの実行がどのように行われたかを理解するために、この関数呼び出しによって返される値に興味があります。

これまでのところ、3 つの結果が見つかりました。

  • Python プロセスが正常に完了すると、system() によって返される値は 0 です。

  • Python プロセスが実行中に (を使用して) 強制終了されるとkill -9 pid、system() によって返される値は 9 です。

  • 不正なパラメーターが原因で Python プロセスが単独で失敗した場合、system() によって返される値は 512 です。

これは、 system()関数について読んだ内容と一致しません。

さらに、呼び出される python プログラムのコードは、sys.exit(2)エラーが発生しsys.exit(0)た場合と実行が正常に完了した場合に終了することを示しています。

誰かがこれら2つを関連付けることができますか? 戻り値を間違った方法で解釈していませんか? sys.exit()Pythonプログラムの関数の引数を取り、それにsystem()基づいて値を返すLinux処理が関係していますか?

4

1 に答える 1

19

呼び出したプログラムの終了コードは、マニュアル ページWEXITSTATUS(status)に従って取得できます。のマニュアルページも参照してください。wait

int status = system("/path/to/my/program");
if (status < 0)
    std::cout << "Error: " << strerror(errno) << '\n';
else
{
    if (WIFEXITED(status))
        std::cout << "Program returned normally, exit code " << WEXITSTATUS(status) << '\n';
    else
        std::cout << "Program exited abnormaly\n";
}
于 2012-06-07T11:52:26.157 に答える