[파이썬, python] Argparse 기본 사용 예시

2023. 9. 2. 23:50프로그래밍/파이썬

반응형

특정 AI 대회에서 간혹 Jupyter Notebook 형식이 아닌, Script 형식으로 baseline 코드가 주어진 경우가 종종 있어왔고, 주먹구구식으로 돌리다가 한번 정리를 하게 되었다.

 


보통, Argparse를 사용하여 스크립트 실행 시 인자를 전달한다. 이게, 처음 접하면 약간은 익숙하지 않아서 복잡하게 느껴진다.

 

기본 사용 예

# argparse1.py

import argparse

def main(args):
    print(f"Hello, {args.name}!")

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="인사를 받을 대상을 입력하세요.")
    parser.add_argument("--name", default="World", help="인사를 받을 대상의 이름")
    args = parser.parse_args()
    main(args)

흔히, 프로그래밍 시작에서 Hello, World를 사용하듯, 이를 차용하여 스크립트를 작성하였다.

 

크게 3단계로 이루어지는데, ArgumentParser 인스턴스를 만들어서, add_argument함수를 활용하여 전달하고 싶은 인자들을 정의하고, parse_args함수를 통해 최종적으로 파싱을 진행한다. (이 떄, 데이터 타입은, argparse.Namespace로, 각 인자들의 이름을 통해 값들을 확인할 수 있다.)

 

Terminal에서 다음과 같이 실행 시, 아래와 같이 결과값을 확인할 수 있다. 먼저, 위 코드 상 default="World" 로 되어있기에,

첫번째 실행과 같이 인자를 따로 전달하지 않아도 실행이 이루어지며, 두번째 의 --name의 인자 전달 또한 가능하다.

또한, description, help에 입력하였던 문구들을 확인하기 위해선 실행 시, --help 혹은 -h를 같이 입력해주면 된다.

description과 help에 입력했던 문구들이 각각 위치하는 것을 확인할 수 있다.


그렇다면, 기본값을 삭제하고, 입력값을 필수적으로 설정하기 위해서는 어떻게 하면 될까 ?

add_argument의 default를 삭제하고, required=True 로 설정해주면 된다.

parser.add_argument("--name", required=True, help="인사를 받을 대상의 이름")

인자를 넣지 않을 경우, 에러가 뜨는 것을 확인할 수 있다.

 


간단히, 더하기를 해주는 기능을 argparse를 활용하여 구현해보았다.

# argparse2.py

import argparse

def add_numbers(a, b):
    return a + b

def main(args):
    result = add_numbers(args.num1, args.num2)
    print(f"The sum of {args.num1} and {args.num2} is {result}")

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="add two numbers")
    parser.add_argument("-n1", "--num1", type=float, required=True, help="First number")
    parser.add_argument("-n2", "--num2", type=float, required=True, help="Second number")
    args = parser.parse_args()

    main(args)

위와 달라진 점은, add_argument를 2번 사용하여, 변수를 2개 파싱하는 것이며, 파싱하게 될 변수의 종류를 지정해놓았다.

또한, 각 변수들의 풀네임을 축약하여 입력할 수 있도록 설정하였다. (가령, --num1 -> -n1만 입력해도 가능하도록, 이때 주의할 점은 사전 예약된 -h, -v등은 사용하면 안된다!)

 

실행을 하게되면, 다음과 같다.

 

설명을 하자면, required=True로 설정하였기 때문에, 인자값을 넘겨주지않으면 에러메시지를 확인할 수 있다.

 

또한, help를 열게되면, 2개의 인자가 있는 것을 확인할 수 있다.

 

각 인자를 공백으로 구분하여 넘겨주면 float의 형태로 덧셈이 이루어지는 것을 확인할 수 있다.

 

여기서, 축약어의 형식으로 사용 시, 하이픈을 두개로 사용하면 오류가 나기 때문에, 한개를 사용해야 하는 것을 알 수 있다.

반응형