Makefileを使用するときにPythonファイルにどのような変更が必要ですか?

Makefileを使用するときにPythonファイルにどのような変更が必要ですか?

Pythonクラスファイルセットがあります。私はMainProgram.pyこれをLinuxでPythonとして実行しており、MainProgram.py残りのクラスファイルを使用しています。入力ファイルから読み込み、出力ファイルに書き込みます。

これまで、私はプログラムの入出力パスをハードコーディングしてきました。ただし、makefile入力パスのリストと出力パスのリストを取得するメカニズムを使用する必要があります。

これを書く方法は何ですかmakefile?これをどのように呼び出すことができますかmakefile? Pythonプログラムmakefileが使用されていることを知らせるには、そのPythonプログラムでどのような変更を適用する必要がありますか?プログラムを使用した後、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。その後、シェル内でファイルを繰り返すか、Makefileを使用することもできます。

また、基本的なPythonプログラムで複数の引数を受け入れ、すべてを処理することもできます。ほとんどのコアユーティリティと同じです(wcここに例があります)。

これがあなたの質問に答えることを願っています。 makefileが何を必要とするのかは実際には明確ではありません。私にとっては不要なようです。また、あなたのプログラムしてはいけない誰がそれを呼んでも関係なく…makefileを呼んでも、指示されたとおりにしなければなりません。ツールは次のとおりですいつもすべてのユースケースで正しく機能するように書かれています。

もう一つ... ファイル名が実際に指定されていないといいですMainProgram.py:)

編集する:

複数のディレクトリにあるファイルの場合は、次のことを試してください(たとえば、アイデアを取得するには)。

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

これにより、終了するすべてのファイルに対してプログラムが呼び出されます.a。 2番目の引数が指定されていないため、プログラムは出力ファイル名自体を構成する必要があります。または、次のラッパーシェルスクリプトを作成します。

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

Pythonプログラムを直接呼び出す代わりにそれを使用してください。ご存知のように、入力ファイルをインポートして拡張子を変更しました。繰り返しますが...これは単なる例であり、正確に何が必要かわかりません。

おすすめ記事