2016-06-14 312 views
0

有人可以幫助我找到一種方法來捕獲Makefile中的python腳本的返回值。我有一個場景,其中源代碼通過Makefile進行構建,當python腳本重新運行失敗時,它應該會引發構建錯誤。如何在Makefile中獲取python腳本的返回值?

myMakefile.mak

python mySample.py <arg1> <arg2> //調用蟒蛇這裏腳本,如何獲得腳本的返回值?

mySample.py提前

SUCCESS 0 
FAIL 1 

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

感謝。

+0

我不確定,但我認爲,如果Python腳本失敗,那麼錯誤級別會提高,因爲任何其他應用程序,因此使得也會失敗。現在,這不是一個你可以在Makefile中管理的錯誤,所以如果你想要更多的選項來管理這個錯誤,或者從你的python腳本中將結果捕獲到你的Makefile中,我就不在了。 – Tim

回答

1

如果你的Python腳本以非零代碼退出,make會檢測到這一點,並告訴你發生了錯誤。所以你不需要做更多的事情。

例如,如果我有做這個節目foo.py

print 'running foo' 
exit(1) 

而一個Makefile這樣的:

foo: 
    python foo.py 

我跑make foo,我得到的輸出:

python foo.py

運行富

化妝:*** [富]錯誤1

因此,檢測到的錯誤。


如果在另一方面,你需要做的是記錄命令的一個Makefile的返回值,你可以使用$?變量,它存儲了命令的最後一個返回值。

幾件事情要注意:

  • 美元符號已經在一個Makefile進行轉義,所以它成爲在命令$$?
  • 因爲在Makefile中的每個命令在一個單獨的shell中運行,你必須捕獲與你正在運行的命令相同的子shell中的輸出(即做同一行,你關心的命令的輸出捕獲部分)

例子:

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

運行make後,您將有一個名爲output包含的mySample.py返回值文件。

+0

雖然除非您特別想'make'忽略故障,您需要以某種方式捕獲並中繼退出狀態;也許'python mySample.py; RC = $$ ?; echo「$$ rc」>輸出;退出$$ rc' – tripleee

0

這樣做的一種方法是讓您的python腳本將您要在makefile中使用的值寫入輸出文件。然後你的makefile可以讀取來自中間文件的值。

例子:

with open("intermediary.tmp", "wb") as h: 
    h.write(SUCCESS) 
相關問題