我有一组 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程序。你看,我刚刚获取了输入文件并替换了扩展名。再说一次......这只是一个例子,我不知道你到底需要什么。