본문 바로가기
SW 개발/Python

Python 명령어 처리: Argparse 모듈 (ArgumentParser 사용 예제)

by Kibua20 2020. 9. 1.

Terminal에서 Python script을 터미널에서 실행할 때 명령어 옵션에 대한 parameter를  python으로 전달할 때 사용하는 방법입니다.

 

제가 작성했던 기존 code는 sys.argv 값을 확인해서 터미널 명령어 인자별로 값을 얻어서 python 변수에 할당하는 방법을 사용하고 있었습니다. 이 경우 명령어 parameter가 추가 또는 삭제하는 경우 if 문 하나씩 증가하는 불편함이 있습니다. 

 

Python에서는 Command line에서 argument처리를 위한 argparse 모듈을 지원합니다. ArgumentParser와 add_argument 함수를 조합하면 보다 편리한 명령어 Parser를 만들 수 있습니다.  아래 

 

 

Usage: ./argv_test.py [parm] [param2]

 

기존 code:   명령어 인수가 변경될 때마다 if문 을 변경해야 하는 불편함이 있음

if __name__ == "__main__":

   param1 = None

   param2 = None

 

  # sys.argv를 if를 처리했음, Parameter 변경 시 code 변경이 많고 예외 처리가 불편함

   if ( len(sys.argv) == 2 ):

         param1 = sys.argv[1]

   elif ( len(sys.argv) == 3 ):

         param1 = sys.argv[1]

         param2 = sys.argv[2]

   else:

          print ('Usage: ./argv_test.py [parm] [param2] ')

 

 

 

Python 공식 문서의 ArgumentParser 객체 설명입니다.  Program 이름, Usage, description, epilog, default 값,  help 옵션을 설정할 수 있습니다. 

 

Argument parser 설명 : 출처:   docs.python.org/ko/3.8/library/argparse.html#description

 

ArgumentParser에서 add_argument() 메서드 설명입니다. 옵션 문자열 list, actionk, 명령어 인자수, default, type, help 인자에 대한 설명을 할 수 있습니다.  

출처:  https://docs.python.org/ko/3.8/library/argparse.html#description

 



Sample 1:  prog, description, eipilog 출력 방법

   parser = argparse.ArgumentParser(

        prog='sample Prog',

       description=' sample description',

       epilog='sample epilog')

   parser.print_help()

 

실행 결과:

./argv_test.py 
usage: sample Prog [-h]

sample description
optional arguments:
      -h, --help show this help message and exit
sample epilog

 

Sample 2 :  ArgumentParser()  객체 생성 후 add_argument() 사용

import argparse

parser = argparse.ArgumentParser(description='테스트')

parser.add_argument("-foo", required=True, help='foo help')

parser.add_argument("-zoo", required=False, help='zoo help')

args = parser.parse_args()

print(args.foo)

print(args.zoo)


실행 결과:

ArgumentParser실행 결과

 

Sample 3. 명령어 인자만 선언하는 경우 - action 활용

Code:

    parser = argparse.ArgumentParser()

    parser.add_argument('--foo', action='store_const', const=42)

    parser.parse_args(['--foo'])

결과: 

   $ myprog.py -f   

   --> args.foo 값에 42 로 설정됨

 

Code:

    parser = argparse.ArgumentParser()

    parser.add_argument('--foo', action='store_true')

    parser.parse_args(['--foo'])

결과: 

   $ myprog.py -f   

   --> args.foo 값이 True로 설정

 

 

 

 

 

 

관련 글

[모바일 SW 개발/Python] - Python에서 사용자 입력 값 받는 방법: input()

[모바일 SW 개발/Python] - Python: JSON 개념과 json 모듈 사용법

[모바일 SW 개발/Python] - Python Error: #!/usr/bin/env python3: 그런 파일이나 디렉터리가 없습니다 (No such file or directory)

[개발환경/Web Server] - Python: Web Framework Flask 사용하기

[모바일 SW 개발/Python] - Python: OSError: [Errno 98] Address already in use (Flask)

[모바일 SW 개발/Python] - Python code 숨기는 방법: PyInstaller로 실행 파일 만들기

[모바일 SW 개발/Python] - Python 여러 버전 설치 방법 (3.x and 3.y 동시 설치)

[모바일 SW 개발/Python] - Python: 폴더 백업 기능 구현 (7zip 압축, Sample code)

[모바일 SW 개발/Python] - Python 소스 숨기는 방법: pyc 활용 (Bytecode로 컴파일)

[모바일 SW 개발/Python] - Python 표준 입출력(stdin/stdout) 활용 - 리눅스 프로그램과 연동

[모바일 SW 개발/Python] - Python JSON 사용 시 TypeError: Object of type bytes is not JSON serializable

[모바일 SW 개발/Python] - Python 2.7과 3.8호환성: a bytes-like object is required, not 'str'에러 수정




댓글