bugfix> python > 投稿

たとえば、コマンドcommandAがあり、commandAの実行後に終了コードを取得したい。 CommandAは失敗することが予想されるため、取得する必要がある終了コードは1です。

ターミナルで commandA;echo $? としてコマンドを入力した場合 、画面に1が表示されます。ただし、Pythonで実行すると、問題が発生しました。

私は os.system(commandA) でcommandAを呼び出そうとしましたまたは subprocess.call(commandA.split()) 、次に os.popen('echo $?').read() を呼び出します 、結果は0です。

os.popen('commandA;echo $?').read() 正しい結果が得られますが、commandAのプロセスは画面に表示されません。これは望ましくありません。

回答 2 件
  • subprocess.call  終了コードを直接返します。

    exit_code = subprocess.call(commandA.split())
    
    

    echo $? を使用する理由  動作していないのは、両方の echo  (通常)および $?  (確かに)シェルの構成体であり、Pythonには存在しません。

  • Pythonのバージョンに依存します。できるよ:

    result=subprocess.check_output(['commandA'],Shell='True')
    
    

    3.xの場合:

    result = subprocess.run(['ls', '-l'], stdout=subprocess.PIPE)
    
    

    または、try catchを使用してエラーのみを表示できます。何かのようなもの:

    try:
        output = subprocess.check_output(["command"])
    except subprocess.CalledProcessError as e:
        errorCode = e.returncode
    
    

あなたの答え