Python - argparse

YJ·2023년 4월 10일
  • argparse 모듈?

    • 프로그램 실행 시, 커맨드 라인에서 인수를 받아 처리할 수 있는 모듈
    • 명령행의 인자(인수)를 'parsing'할 때 사용하는 모듈
    • parsing?
      • 구문 분석
        • 문장이 이루고 있는 구성 성분을 분해하고 분해된 성분의 위계 관계를 분석하여 구조를 결정
        • 데이터를 분해 분석하여 원하는 형태로 조립하고 사용
        • 우리가 '터미널'에서 파일을 실행할 때, 명령행에 인자를 입력하면 argparse 모듈이 명령행을 parsing하여 이 인자 값에 따라 원하는 동작을 수행
  • parser = argparse.ArgumentParser()

    • argparse.ArgumentParser()는 인자를 parsing하기 위한 ArgumentParser 객체를 생성하는 함수
    • 이 함수로 생성한 객체로 프로그램에서 사용 가능한 인자(argument)를 지정
  • parser.add_argument()

    • parsing할 인자를 add_argument 메서드로 추가
  • parse_args()

    • 명령행에서 입력 받은 인자를 parsing하고 값을 반환
  • parser.add_argument() 예시

    import argparse
    
    		def server(port):
    print('server port: ', port)
    
    		def client(port):
    print('client port: ', port)
    
    		if __name__ == '__main__':
    choose = {'ser': server, 'cli': client}
    
    # parser 생성
    parser = argparse.ArgumentParser()
    
    # parser.add_argument로 받아들일 인수 추가
    
    # 필수 인수 'role'
    # 인수를 지정하는 순서가 정해져 있음
    		# 아래 코드의 경우 명령행 첫 번째 인자에 role에 해당하는 인자를 입력해야함
    
    # 지정한 내용 선택지 중 내에서 선택할 수 있게 지정
    # choices=( [] , {} )
    parser.add_argument('role', choices=choose)
    
    # 옵션인수
    # 실행시, 지정해도 지정하지 않아도 상관 없음
    # 지정하는 순서도 자유(필수 인수와 다름)
    # 앞의 옵션인수: 정식명칭
    # 뒤의 옵션인수: 약칭
    # 프로그램 내에서는 정식명칭만 사용 가능
    
    # default 값 지정
    # 옵션인수로 지정되지 않으면 None
    # None이 아닌 다른 기본값을 설정하고 싶을 경우 사용
    # 아래 코드는 -p가 지정되지 않은 경우, 1060이 됨
    
    # 데이터 타입을 지정
    # 기본적으로 str
    # int, float으로 지정하고 싶을 경우
    # type=int, type=float
    # 아래 코드는 type=int
    parser.add_argument('-p', metavar='PORT', type=int, default=1060)
    
    # extra value
    parser.add_argument("-d", "--decimal", dest="decimal", action="store")       
    
    # existence/nonexistence
    # 아래 코드의 경우 플래그로 사용
    # action='store_true'로 지정
    # -f가 지정되면 True, -f가 지정되지 않으면 False
    parser.add_argument("-f", "--fast", dest="fast", action="store_true") 
    
    # action='store_false'로 지정 시
    # -f가 지정되면 False, -f가 지정되지 않으면 True
    parser.add_argument("-s", "--slow", dest="slow", action="store_false") 
    
    # action="store"
    # 추가 옵션을 받음
    # 추가 옵션 값은 dest 인자로 지정한 변수에 저장
    
    # 인수를 전달하지 않은 경우
    # 인수 없이 명령행에 추가 옵션 값을 입력하면 저장됨
    # 아래의 실행 결과에서 'hello'를 추가 옵션 값으로 전달 시
    # 이 값이 parsing되어 dst라는 변수의 값으로 할당됨을 확인
    parser.add_argument(dest="dst", action="store")
    
    parser.add_argument("--qp", dest="qp", action="store")
    
    # 앞의 옵션인수: 정식명칭
    # 뒤의 옵션인수: 약칭
    parser.add_argument("-c", "--configure", dest="configure", action="store")
    
    
    # 인수 분석
    args = parser.parse_args()
    
    # function
    function = choose[args.role]
    function(args.p)
    
    if args.decimal == '1':
        print("decimal is 1")
    
    if args.fast:
        print("-f option is used")
        
    if args.slow:
        print('-s option is used')
    
    print(args.dst)
    print(args.qp)
    print(args.configure)
  • 실행 결과

  • 참조

profile
dev

0개의 댓글