2016-06-14 21 views
0

Makefileのpythonスクリプトから戻り値を取得する方法を誰かに教えてもらえますか?ソースコードがMakefileを使ってビルドされ、pythonスクリプトが失敗したときにビルドエラーが発生するシナリオがあります。Makefileのpythonスクリプトの戻り値を取得するには?

myMakefile.mak

python mySample.py <arg1> <arg2> //呼び出し側のPythonスクリプトここでは、どのようにスクリプトの戻り値を取得しますか?

mySample.py事前に

SUCCESS 0 
FAIL 1 

if(true) 
    exit(SUCCESS) 
else: 
    exit(FAIL) 

感謝。

+0

私は確信していませんが、私はPythonスクリプトが失敗した場合、他のアプリケーションと同様にエラーレベルが上がり、makeも失敗すると思います。これはMakefileで管理できるエラーではないので、このエラーを管理するオプションや、Pythonスクリプトの結果をMakefileにキャッチするオプションが必要な場合は、私は外に出ます。 – Tim

答えて

1

makeはこれを検出し、エラーが発生したことを教えてくれます。だからもっと何もする必要はありません。

例は、私がこれを行うプログラムfoo.py持っている場合:

print 'running foo' 
exit(1) 

そして、このようなMakefile

foo: 
    python foo.py 

を私はmake fooを実行し、私は出力を得る:

python foo.py

だから、それがエラーを検出した1

*** [FOO]エラー:

はfooの

メイクを実行しています。一方で、何がやりたいことはMakefileの中のコマンドの戻り値を記録している場合


は、コマンドの最後の戻り値を格納$?変数を、使用することができます。

注意するカップルの事:メイクファイル内の各コマンドは、別のシェルで実行されているので、それはコマンド

  • $$?なるよう

    • ドル記号は、Makefileでエスケープする必要があります実行中のコマンドと同じサブシェルで出力をキャプチャする必要があります(つまり、

      build: 
          python mySample.py ; echo $$? > output 
      

      makeを実行した後、あなたはmySample.pyの戻り値が含まれているoutputという名前のファイルがあります:あなたが気にコマンドと同じラインの出力取り込み部)

    例を作ります。

  • +0

    特に 'make'で失敗を無視しない限り、何とか終了ステータスを取得して中継する必要があります。おそらく 'python mySample.py; rc = $$?; echo "$$ rc">出力。 exit $$ rc' – tripleee

    0

    これを行うには、あなたのpythonスクリプトに、makefileで使用したい値を出力ファイルに書き込ませる方法があります。その後、あなたのmakefileはその中間ファイルから値を読み取ることができます。

    例:Pythonスクリプトがゼロ以外のコードで終了した場合

    with open("intermediary.tmp", "wb") as h: 
        h.write(SUCCESS) 
    
    関連する問題