2009-06-30 197 views
7

我正在編寫python腳本並在Makefile中執行它們。 python腳本用於處理管道中的數據。每次我對我的python腳本進行更改時,我都希望Makefile執行該腳本。使用Makefile執行Python腳本

有沒有人有如何做到這一點的想法?

回答

16

這不是很多的信息,所以這個答案有點含糊。 Makefiles的基本原則是列出每個目標的依賴關係;在這種情況下,你的目標(我們稱之爲富)取決於你的Python腳本(我們稱之爲do-foo.py):

foo: do-foo.py 
    python do-foo.py > foo 

現在,每當do-foo.py變化(提供foo將重新運行,當然,你打電話make)。

+0

我沒有在我的腳本中正確定義依賴於我的.py文件。謝謝 – Patrick 2009-06-30 09:02:58

+0

作爲一個說明,即使這個問題是有效的自我解決,我想擴大這個答案。您還可以使用`python -m compileall`的調用將字節碼編譯定義爲目標,以生成目標`pyc/pyo`文件。 – amcgregor 2017-05-26 18:39:21

0

如果您希望Makefile在保存後立即自動「製作」,pyinotify(其爲inotify的包裝)可能是Linux下的唯一可能。它在內核註冊以檢測FS變化並回調你的功能。

關於該主題,請參閱我的previous post

+0

相關提示!但我想我的問題有點不清楚,這更像是一個makefile問題。不管怎麼說,還是要謝謝你! – Patrick 2009-06-30 09:03:45

3

而如果當需要運行不產生可以用來作爲目標的任何有用的輸出文件的腳本,你可以只使用一個虛擬的目標:

scripts=a.py b.py c.py 
checkfile=.pipeline_up_to_date 

$(checkfile): $(scripts) 
    touch $(checkfile) 
    echo "Launching some commands now." 

default: $(checkfile) 
+2

.PHONY呢? http://gnu.huihoo.org/make-3.77/html_node/make_33.html – 2009-06-30 08:50:50