使用Makefile执行Python脚本

10

我正在编写Python脚本并在Makefile中执行它们。该Python脚本用于在一个管道中处理数据。我希望每次更改Python脚本时,Makefile都能执行这个脚本。

有人知道如何实现吗?

3个回答

21

这并不是很详细的信息,所以这个答案有点模糊。Makefile 的基本原则是为每个目标列出依赖项;在这种情况下,您的目标(我们称之为 foo)依赖于您的 Python 脚本(我们称之为 do-foo.py):

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

现在,只要do-foo.py发生更改(当然,前提是你调用make),foo就会被重新运行。


我在脚本中没有正确定义我的.py文件的依赖关系。谢谢。 - Patrick
作为一条注释,尽管问题已经得到了有效的自我解决,但我想进一步扩展这个答案。您还可以使用python -m compileall的调用来定义字节码编译为目标,以生成目标pyc/pyo文件。 - amcgregor

4

假如需要执行的脚本没有产生有用的输出文件作为目标,可以使用一个虚拟目标:

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

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

default: $(checkfile)

0

如果你想让Makefile在保存后立即自动“创造”,pyinotify 可能是在Linux下唯一的可能性,它是 inotify 的封装器。它在内核中注册以检测文件系统的更改,并回调您的函数。

请参阅我的先前的帖子


好的,知道了!但我认为我的问题有点不清楚,它更像是一个Makefile的问题。无论如何,还是谢谢! - Patrick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接