[파이썬] argparse 인수의 파싱 순서 및 우선순위

파이썬 스크립트를 작성하다 보면, 명령행에서 인수를 지정해야 할 때가 있습니다. 이때 가장 널리 사용되는 라이브러리인 argparse를 사용하면 명령행 인수를 손쉽게 파싱할 수 있습니다. 그러나 argparse의 인수 순서와 우선순위에 대해 알아두는 것은 중요합니다. 이번 블로그에서는 argparse를 사용할 때 인수의 파싱 순서와 우선순위에 대해 살펴보겠습니다.

인수의 파싱 순서

argparse는 프로그램이 인수를 파싱하는 순서를 정해 줄 수 있습니다. 기본적으로 argparse는 순서를 무시하고 파싱합니다. 그러나 add_argument 함수의 action 인수를 사용하여 명시적으로 순서를 지정할 수 있습니다. 예를 들어, store_true 액션을 사용하면 해당 인수가 지정되면 True로 값을 저장하고, 지정되지 않으면 False로 값을 저장합니다. 이렇게 액션을 사용하여 인수의 파싱 순서를 지정할 수 있습니다.

아래는 순서를 지정하여 인수를 파싱하는 예시입니다.

import argparse

parser = argparse.ArgumentParser()

parser.add_argument("--first", action="store_true")
parser.add_argument("--second", action="store_true")
parser.add_argument("--third", action="store_true")

args = parser.parse_args()

if args.first:
    print("First argument is specified")

if args.second:
    print("Second argument is specified")

if args.third:
    print("Third argument is specified")

위의 예시에서는 --first, --second, --third 순서로 인수를 지정할 수 있습니다. 이에 따라 각 인수에 대한 처리가 이루어집니다.

인수의 우선순위

argparse로 인수를 파싱할 때, 인수의 우선순위도 고려해야 합니다. 각 인수의 우선순위는 인수의 추가된 순서에 따라 결정됩니다. 먼저 추가된 인수가 먼저 파싱되고 처리됩니다. 따라서 뒤에 추가된 인수는 앞에 추가된 인수보다 우선순위가 높습니다.

아래는 인수의 우선순위를 보여주는 예시입니다.

import argparse

parser = argparse.ArgumentParser()

parser.add_argument("--name")
parser.add_argument("--age")
parser.add_argument("--gender")

args = parser.parse_args()

print(f"Name: {args.name}")
print(f"Age: {args.age}")
print(f"Gender: {args.gender}")

위의 예시에서는 --name, --age, --gender 순서로 인수를 지정할 수 있습니다. 입력된 값은 순서에 상관없이 출력됩니다.

$ python script.py --name Alice --gender female --age 25
Name: Alice
Age: 25
Gender: female

위의 결과에서 볼 수 있듯이, 인수의 우선순위에 상관없이 인수의 값이 올바르게 출력됩니다.

argparse를 사용하면 인수의 파싱 순서와 우선순위를 쉽게 정의할 수 있습니다. 이를 통해 프로그램을 더 유연하게 만들고 사용자가 입력한 인수를 완전히 제어할 수 있습니다.