2016-10-04 2 views
1

Pythonスクリプトを使ってC++で書かれたコードをコンパイルして、xディレクトリに "make"を実行するとエラーが発生します。コードのコンパイルには数秒かかりますので、スクリプトを60秒間スリープさせてコードのコンパイルを完了させるには、timeモジュールを使用しています。ここでPythonスクリプトでC++コード(make)のビルドを実行

はコードです:コードの残りの部分は作成されませんでしたログファイルに依存しているため

make: *** No rule to make target `../../ads/main/unittest'. Stop. 

from subprocess import call 
from time import sleep 
def make_ut_adsmain(): 
     os.system("make ../../ads/main/unittest") 
     # call(["ls", "-l"]) 
     sleep(60) 

make_ut_adsmain() 

# Run other functions when compiled... 

エラーコードは、実際にコンパイルされません。私を案内してください。

+0

そのディレクトリで手動でmakeを実行しても問題ありませんか?これはPythonがMakefile – vkuo

+0

を見つけることができないことを示しているようです。私はちょうどそれを解決することができます。以下にソリューションを掲載してください。 –

答えて

2

私は実際にそれを考え出したし、次のコード使用してビルドプロセスを実行することができ:

import subprocess 
from time import sleep 
def make_ut_adsmain(): 
     subprocess.Popen(["make"], stdout=subprocess.PIPE, cwd="../../ads/main/unitest") 
     sleep(60) 

make_ut_adsmain() 

注意を、以前のソリューションを使用すると、エラーを回避する必要がある場合にのみ機能します。正しい方法は次のとおりです。 @tdelaneyのコメントをチェックし、さらにPythonのドキュメントを読むhttps://docs.python.org/2/library/subprocess.html

import subprocess 
from time import sleep 
def make_ut_adsmain(): 
     subprocess.check_all(["make"], cwd="../../ads/main/unitest") 

make_ut_adsmain() 
+0

これには大きな問題があります。あなたは 'cwd'を変更することで一つの問題を修正しますが、' stdout'にはパイプを作成しますが、それを読み込まないでください(たくさんのデータを出力するとデッドロックが発生します)。フィニッシュに電話する。最低限、 'subprocess.check_call([" make "]、cwd =" ../../ ads/main/unitest ")') 'を実行し、完全に眠りを取り除く。 – tdelaney

+0

ありがとう@tdelaney:私はドキュメントを読んで意味があります。しかし、あなたの最小限の解決策は私にエラーをもたらします:subprocess.CalledProcessError:コマンド '[' make ']'はゼロ以外の終了ステータス2を返しました。 –

+1

これは素晴らしいことです!それは、メイクが失敗し、あなたはそれを理解する必要があることを意味します。元のスクリプトは、エラーを黙って無視しました。 – tdelaney

関連する問題