2009-06-30 337 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