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 옵션을 설정할 수 있습니다.
ArgumentParser에서 add_argument() 메서드 설명입니다. 옵션 문자열 list, actionk, 명령어 인자수, default, type, help 인자에 대한 설명을 할 수 있습니다.
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)
실행 결과:
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 모듈 사용법
[개발환경/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'에러 수정
댓글