ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] argparse 사용법 (파이썬 인자값 추가하기)
    언어/파이썬 & 장고 2019. 1. 16. 21:42

    파이썬 스크립트를 개발할 때, 호출 당시 인자값을 줘서 동작을 다르게 하고 싶은 경우가 있습니다. 이때, 파이썬 내장함수인 argparse 모듈을 사용하여 원하는 기능을 개발할 수 있습니다.

    아래 설명은 파이썬 3.7 버전 기준으로 작성했습니다.

    사용법

    간단하게 인자값을 받아 처리하는 로직은 아래와 같습니다.

    import argparse
    
    # 인자값을 받을 수 있는 인스턴스 생성
    parser = argparse.ArgumentParser(description='사용법 테스트입니다.')
    
    # 입력받을 인자값 등록
    parser.add_argument('--target', required=True, help='어느 것을 요구하냐')
    parser.add_argument('--env', required=False, default='dev', help='실행환경은 뭐냐')
    
    # 입력받은 인자값을 args에 저장 (type: namespace)
    args = parser.parse_args()
    
    # 입력받은 인자값 출력
    print(args.target)
    print(args.env)
    


    위와 같이 코드를 작성한 다음, 터미널에서 해당 파일을 인자값 없이 실행시키면 아래와 같이 노출이 됩니다.

    $ python3 argparse_test.py
    usage: argparse_test.py [-h] --target TARGET [--env ENV]
    argparse_test.py: error: the following arguments are required: --target
    
    $ python3 argparse_test.py -h
    usage: argparse_test.py [-h] --target TARGET [--env ENV]
    
    사용법 테스트입니다.
    
    optional arguments:
      -h, --help       show this help message and exit
      --target TARGET  어느 것을 요구하냐
      --env ENV        실행환경은 뭐냐


    다음은 인자값을 target, env에 인자값을 주고 실행시킨 결과입니다.

    $ python3 argparse_test.py --target=테스트 --env=local
    테스트
    local
    
    $ python3 argparse_test.py --target=테스트
    테스트
    dev
    
    $ python3 argparse_test.py --env=qa
    usage: argparse_test.py [-h] --target TARGET [--env ENV]
    argparse_test.py: error: the following arguments are required: --target

    인자값 설명

    위에서 설명한 기능으로도 원하는 동작을 충분히 커버할 수 있습니다. 아래는 객체와 메서드에 어떤 인자가 있는지 간략하게 설명하겠습니다.

    ArgumentParser()

    해당 객체에는 아래와 같이 입력받고 있습니다.

    • prog: 프로그램의 이름 (기본값: sys.argv[0])
      • 기본값으로 실행한 스크립트파일명을 노출. 작성 시 스크립트 파일 대신 입력한 값이 노출
    • usage: 프로그램 사용법을 설명하는 문자열 (기본값: 파서에 추가된 인자로부터 만들어지는 값)
      • 사용방법을 노출.  기본값으로 실행한 파일 + 입력한 인자값들을 노출
    • description: 인자 도움말 전에 표시할 텍스트 (기본값: none)
      • 스크립트에 -h 옵션을 주어 실행 시, usage 아래에 노출
    • epilog: 인자 도움말 후에 표시할 텍스트 (기본값: none)
    • parents: ArgumentParser 객체들의 리스트이고, 이 들의 인자들도 포함
    • formatter_class: 도움말 출력을 사용자 정의하기 위한 클래스
    • prefix_chars: 선택 인자 앞에 붙는 문자 집합 (기본값: '-').
    • fromfile_prefix_chars: 추가 인자를 읽어야 하는 파일 앞에 붙는 문자 집합 (기본값: None).
    • argument_default: 인자의 전역 기본값 (기본값: None)
    • conflict_handler: 충돌하는 선택 사항을 해결하기 위한 전략 (일반적으로 불필요함)
    • add_help: 파서에 -h/--help 옵션을 추가 (기본값: True)
    • allow_abbrev: 약어가 모호하지 않으면 긴 옵션을 축약할 수 있도록 함. (기본값: True)

    add_argument()

    해당 메서드는 아래와 같이 입력받고 있습니다.

    • name or flags: 옵션 문자열의 이름이나 리스트, 예를 들어 foo 또는 -f, --foo.
    • action: 명령행에서 이 인자가 발견될 때 수행 할 액션의 기본형.
    • nargs: 소비되어야 하는 명령행 인자의 수.
    • const: 일부 action 및 nargs 를 선택할 때 필요한 상숫값.
    • default: 인자가 명령행에 없는 경우 생성되는 값.
    • type: 명령행 인자가 변환되어야 할 형.
    • choices: 인자로 허용되는 값의 컨테이너.
    • required: 명령행 옵션을 생략 할 수 있는지 아닌지 (선택적일 때만).
    • help: 인자가 하는 일에 대한 간단한 설명.
    • metavar: 사용 메시지에 사용되는 인자의 이름.
    • dest: parse_args() 가 반환하는 객체에 추가될 어트리뷰트의 이름.


    해당 인자들과 추가적인 기능에 대한 자세한 설명은 https://docs.python.org/ko/3.7/library/argparse.html 에서 확인할 수 있습니다.

    댓글