Python으로 작성한 코드를 실행할 때 특정 Argument를 추가해야만 실행이 가능하도록 코드를 작성하고 싶은 경우가 발생한다. Python에서 “argparse”를 사용하면 쉽게 Argument를 추가할 수 있다.
Argparse 사용하기
아래 코드1은 Argparse를 사용하는 예제 코드이다.
- argparse.ArgumentParser(…): argparse를 사용하기 위해서 가장 먼저 해당 코드를 사용해서 Variable을 생성한다.
- VARIABLE.add_argument(…): 생성된 Variable에 add_argument(..)를 사용해서 Argument 옵션을 하나씩 추가한다.
위 2가지가 Argparse를 사용하는 데 있어서 가장 중요하다고 판단되는 함수이다.
코드 1: Argparse 예제 코드
import argparse class mkTest: def optionEnable(self, round): print("Enable Option " + str(round)) def optionDisable(self, round): print("Disable Option " + str(round)) if __name__ == "__main__": mkTmp = mkTest() #MK: 옵션을 추가 하는 방법 mkParser = argparse.ArgumentParser(description="Show Options") mkParser.add_argument("--op", type=str, required=True, choices=["enable", "disable"], help="Enable/Disable Option") mkParser.add_argument("--numRound", type=int, required=False, default=1, help="Number of Round (Default = 1)") mkParser.add_argument("--option", action="store_true", help="Optional Flag") mkParser.add_argument("--optionA", type=int, help="if option is enabled, optionA must be required") mkArg = mkParser.parse_args() #MK: option을 Enable하는 경우 optionA도 항상 Input으로 들어와야 실행됨. if mkArg.option and (mkArg.optionA is None): mkParser.error("--optionA is required field") if mkArg.op == "enable": for i in range(0, mkArg.numRound): mkTmp.optionEnable(i) else: for i in range(0, mkArg.numRound): mkTmp.optionDisable(i)
그림 1: 예제 코드 실행 결과
위 예제 코드1을 실행하면 그림 1과 같은 결과를 확인 할 수 있다.
- mkParser.add_argument(..): 원하는 Input Argument 옵션을 추가한다. “Required” 옵션이 True인 경우 꼭 해당 Argument 옵션은 꼭 필요하다는 의미이다. “Help”의 경우 해당 Argument 옵션에 대한 설명이다. “Type”은 옵션의 Input Type을 의미한다. 예를 들어 Int, Float, Str 등을 사용할 수 있다.
- mkParser.parse_args(): Input Argument 옵션들이 제대로 입력되었는지 확인하고 만약 “Required” Argument가 제대로 입력되지 않은 경우 에러를 발생시킨다. 만약 모든 Argument가 정상적으로 들어온 경우 Argument의 값들을 리턴한다.
- RETURN_VARIABLE.OPTIONNAME (예: mkArg.optionA): parse_args()에서 리턴한 Argument 값을 확인할 수 있다.
실험환경
- Python Version: 3.7
- OS: Ubuntu Linux 18.04
출처
- https://stackoverflow.com/questions/19414060/argparse-required-argument-y-if-x-is-present
- https://docs.python.org/2/library/argparse.html
- https://m.blog.naver.com/PostView.nhn?blogId=cjh226&logNo=220997049388&proxyReferer=https%3A%2F%2Fwww.google.com%2F
- https://brownbears.tistory.com/413
- https://stackoverflow.com/questions/15753701/argparse-option-for-passing-a-list-as-option