使用 Makefile 时要对 Python 文件进行哪些更改?

使用 Makefile 时要对 Python 文件进行哪些更改?

我有一组 python 类文件。我MainProgram.py在 Linux 上以 python 的形式运行MainProgram.py,它使用其余的类文件。它从输入文件读取并写入输出文件。

到目前为止,我已经在程序中硬编码了输入路径和输出路径。但现在我应该使用makefile机制来获取输入路径列表和输出路径列表。

这个怎么写呢makefile?我怎样才能调用这个makefile?必须在我的 python 程序中进行哪些相应的更改才能让它知道makefile正在使用?使用后我现在makefile如何运行我的程序?python

答案1

Makefile 与你的 python 程序几乎没有任何关系。这实际上取决于你想要你的 makefile 做什么,但大多数情况下你需要修复你的 python 程序,使其按其应有的方式运行(不仅仅是因为 Makefile,而是为了一般的良好实践)。

命令行脚本通常应将输入文件作为参数(或来自标准输入,以便管道工作),并将输出写入 stdout(或指定为参数的文件)。正常的调用会是这样的

./MainProgram.py inputfile > outputfile

我还假设您#!/usr/bin/env python在第一行中使用以避免python每次使用时显式调用解释器。

所以...现在您有了一个带有参数的程序,您可以自由地编写 makefile 规则。例如,如果您的 python 文件获取一个.a文件并.b从中创建一个文件,那么您可以编写类似的内容

.a.b:
    MainProgram.py $< > $@

对于 gnu make (语法可能有所不同,有不同的做事方式,有些人会对我的方式皱眉,但这只是一个例子)。所以...现在你可以说

make foo.b

它会召唤MainProgram.py foo.a > foo.b你。然后,您可以在 shell 内循环文件,或者也使用 Makefile。

您还可以让您的主 python 程序接受任意数量的参数并对所有参数进行处理。就像大多数核心实用程序一样(wc这是一个例子)。

我希望这能回答您的问题 - 确实不清楚您需要 makefile 的目的。对我来说似乎没有必要。另外,你的程序不应该关心谁调用它...makefile 与否,它应该做它被告知做的事情。工具应该总是编写以便它们在所有用例中都能正常工作。

另一件事......我确实希望你的文件没有真正命名MainProgram.py:)

编辑:

对于多个目录中的文件,请尝试(例如,这样您就明白了):

find . -name '*.a' -exec ./MainProgram.py '{}' ';'

这会为每个以 . 结尾的文件调用您的程序.a。没有给出第二个参数,因此程序必须自行构造输出文件名。或者只是制作一个包装 shell 脚本,例如

#!/bin/bash
input="$1"
output="${input%.*}.b"
./MainProgram.py "$input" "$output"

并使用它而不是直接调用python程序。你看,我刚刚获取了输入文件并替换了扩展名。再说一次......这只是一个例子,我不知道你到底需要什么。

相关内容