[python] argparse 사용법

About_work·2024년 2월 7일
0

python 기초

목록 보기
31/65

Python의 argparse 모듈은 명령줄 인자를 프로그램에 쉽게 파싱할 수 있게 해주는 유용한 표준 라이브러리입니다. 이 모듈을 사용하면 명령줄 옵션, 인자 및 서브 커맨드의 파서를 쉽게 생성할 수 있으며, 자동으로 사용자 도움말과 사용법 메시지를 생성합니다.


1. 기본 사용법

argparse 모듈을 사용하기 위해서는 먼저 ArgumentParser 객체를 생성해야 합니다. 그 다음, 이 객체에 프로그램이 받아들일 명령줄 인자에 대한 정보를 추가합니다. 마지막으로, parse_args() 메소드를 사용하여 명령줄 인자를 파싱합니다.

import argparse

# 파서 생성
parser = argparse.ArgumentParser(description='Example Argparse Program')

# 인자 추가
parser.add_argument('--foo', help='foo help')
parser.add_argument('bar', nargs='+', help='bar help')

# 인자 파싱
args: argparse.Namespace = parser.parse_args()

# 사용 예
print(args.foo)
print(args.bar)

2. 인자 추가 메소드: add_argument()

add_argument() 메소드는 프로그램이 받을 수 있는 인자를 파서에 추가합니다. 이 메소드는 여러 옵션을 제공하여 인자의 동작을 세밀하게 설정할 수 있습니다.

  • name or flags: 인자의 이름이나 옵션 문자열의 리스트 (예: foo 또는 --foo, -f)
  • action: 인자가 발견될 때 수행할 동작
  • nargs: 받아들일 명령줄 인자의 수
  • const: action'store_const'이나 'append_const'로 설정될 때 사용할 상수 값
  • default: 인자가 제공되지 않을 때 사용할 기본값
  • type: 인자가 변환될 데이터 타입
  • choices: 인자로 허용될 값의 컨테이너
  • required: 명령줄 옵션 인자가 필수인지 여부 (기본값은 False)
  • help: 인자에 대한 도움말 메시지
  • metavar: 사용법 메시지에서 사용될 인자의 이름
  • dest: 파싱된 인자가 저장될 속성의 이름

2.1. 동작 옵션 (action)

action 옵션은 파서가 인자를 어떻게 처리할지 결정합니다. 몇 가지 일반적인 action 값에는 다음이 포함됩니다:

  • 'store': 인자의 값을 저장 (기본 동작)
  • 'store_true' / 'store_false': 인자가 지정되면 True/False를 저장
  • 'append': 인자가 여러 번 지정되면 값의 리스트를 저장
  • 'count': 인자가 나타난 횟수를 저장

3. 예제: 불리언 옵션과 선택적 인자

import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('--sum', dest='accumulate', action='store_const',
                    const=sum, default=max,
                    help='sum the integers (default: find the max)')

parser.add_argument('integers', metavar='N', type=int, nargs='+',
                    help='an integer for the accumulator')

args: argparse.Namespace = parser.parse_args()
print(args.accumulate(args.integers))

이 예제에서 --sum 옵션은 사용자가 합계를 계산하고자 할 때 사용됩니다. 그렇지 않으면 기본적으로 최댓값을 찾습니다. integers 인자는 하나 이상의 정수를 받

아들이며, accumulate 함수는 이 정수들에 적용됩니다.

argparse 모듈은 명령줄 인터페이스를 제공하는 Python 프로그램을 작성할 때 매우 유용하며, 복잡한 인자 처리 요구 사항도 쉽게 관리할 수 있게 해줍니다.


4. argparse.Namespace?

  • args: argparse.Namespace = parser.parse_args()
  • namespace: https://velog.io/@jk01019/Namespace-jru5uahd
  • 이 객체는 커맨드 라인에서 프로그램에 전달된 인자들(arguments)을 저장하는데 사용
  • 간단하게 말해서, argparse.Namespace는 사용자가 프로그램을 실행할 때 커맨드 라인에 입력한 옵션들을 저장하는 '가방'

4.1. argparse.Namespace를 이해하기 위한 비유

고등학생에게 이해를 돕기 위해, 게임을 예로 들어 보겠습니다. 여러분이 컴퓨터 게임을 시작할 때, 게임의 난이도, 캐릭터 이름, 사용할 무기 등을 설정할 수 있다고 상상해 봅시다. 이 정보들을 게임이 시작하기 전에 입력하면, 게임은 여러분이 입력한 설정대로 진행됩니다.

이제, argparse.Namespace는 마치 여러분이 게임을 시작하기 전에 선택한 설정들(난이도, 캐릭터 이름, 사용할 무기 등)을 저장하는 가상의 '가방'과 같습니다. 프로그램이 실행될 때, 커맨드 라인을 통해 입력된 각종 설정들이 이 '가방' 안에 넣어져 프로그램 내에서 사용될 수 있게 됩니다.


5. parse_args VS parse_known_args

  • parse_argsparse_known_args 함수: 파이썬 스크립트에 전달된 커맨드 라인 인자를 파싱하는 데 사용
  • 사용 방법, 매개변수(parameter), 반환 값(return value)의 타입에서 차이
  • 요약:
    • parse_argsparse_known_args의 주된 차이는 오류 처리와 인자의 유연성에 있음
    • parse_args는 엄격하게 인자를 처리하며, 모든 인자가 정의에 맞아야 함
    • 반면, parse_known_args는 정의된 인자들만 처리하고, 나머지는 후속 처리를 위해 반환
    • 이 차이는 스크립트가 어떻게 인자를 처리해야 하는지에 따라, 적절한 함수를 선택하는 데 중요

5.1. parse_args

5.1.1. 매개변수
  • args:
    • None이거나 문자열의 리스트.
    • 기본값은 None으로, 이 경우 sys.argv에서 인자들을 자동으로 가져옴
    • 명시적으로 인자 리스트를 제공할 수도 있음
  • namespace:
    • argparse.Namespace 객체.
    • 인자가 추가될 객체를 지정할 수 있음
    • 기본값은 새로운 Namespace 객체를 생성
5.1.2. 반환 값
  • 타입: argparse.Namespace
  • 설명:
    • 파싱된 인자들을 포함하는 Namespace 객체를 반환
    • 이 객체는 각 인자가 속성으로 설정되어 있으며,
    • 스크립트 내에서 이를 통해 인자 값을 액세스할 수 있음
5.1.3. 사용법
  • parse_args는 모든 인자가 명시된 파서에 의해 정의된 규칙을 따라야 한다고 가정
  • 인자가 규칙을 따르지 않거나 정의되지 않은 인자가 있으면 오류 메시지를 출력하고 프로그램을 종료

5.2. parse_known_args

5.2.1. 매개변수
  • args:
    • None이거나 문자열의 리스트.
    • parse_args와 마찬가지로, 기본값은 None이며, 이 경우 sys.argv에서 인자들을 가져옴
    • 명시적으로 인자 리스트를 제공할 수도 있음
  • namespace:
    • argparse.Namespace 객체.
    • 인자가 추가될 객체를 지정할 수 있음
    • 기본값은 새로운 Namespace 객체를 생성
5.2.2. 반환 값
  • 타입: 튜플 (argparse.Namespace, 리스트)
  • 설명:
    • 첫 번째 요소는 파싱된 인자들을 포함하는 Namespace 객체
    • 두 번째 요소는 정의되지 않은 나머지 인자들의 리스트
  • 이를 통해, 정의된 인자들을 처리하고 나머지 인자들을 다른 용도로 사용할 수 있습니다.
5.2.3. 사용법
  • parse_known_args는 정의된 인자들을 파싱하고, 나머지 알려지지 않은 인자들은 무시하거나 별도로 처리하기 위한 경우에 유용
  • 이 함수는 정의되지 않은 인자들로 인해 스크립트 실행이 중단되지 않으므로, 다양한 소스에서 인자를 받거나, 특정 인자를 다른 파서로 전달해야 할 때 사용
profile
새로운 것이 들어오면 이미 있는 것과 충돌을 시도하라.

0개의 댓글