Makefile을 사용할 때 Python 파일에 어떤 변경이 필요합니까?

Makefile을 사용할 때 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. 두 번째 인수가 제공되지 않으므로 프로그램은 출력 파일 이름 자체를 구성해야 합니다. 아니면 다음과 같은 래퍼 쉘 스크립트를 만드십시오.

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

Python 프로그램을 직접 호출하는 대신 이를 사용하십시오. 알다시피, 방금 입력 파일을 가져와서 확장자를 바꿨습니다. 다시 말하지만... 이것은 단지 예일 뿐이며 정확히 무엇이 필요한지 모르겠습니다.

관련 정보