Let's study Python

Python argparse를 사용하여 프로그램 실행 옵션을 쉽게 다루세요!

# Python argparse 사용법

## 목차
01. [argparse 개요](#argparse-개요)
02. [argparse 기본 기능](#argparse-기본-기능)
03. [argparse 응용 기능 – 버전 정보 출력하기](#argparse-응용-기능—버전-정보-출력하기)
04. [argparse 응용 기능 – 기능 실행 명령 받기(Boolean)](#argparse-응용-기능—기능-실행-명령-받기boolean)
05. [argparse 응용 기능 – 기능 실행 조건을 명령 받기(Integer)](#argparse-응용-기능—기능-실행-조건을-명령-받기integer)
06. [argparse 응용 기능 – 기능 실행 조건을 명령 받기(String)](#argparse-응용-기능—기능-실행-조건을-명령-받기string)

### argparse 개요
Python 프로그램에 도움말 설명(help)을 제공할 수 있고, 실행 아규먼트(인자, 매개변수)를 파서하기 편한 인터페이스를 제공한다.

### argparse 기본 기능
Python 라이브러리 argparse는 Python 3 이상에서 제공된다.

“`python
import argparse

if __name__ == “__main__”:
parser = argparse.ArgumentParser(prog=’Program Name’, description=’안녕하세요. 자동 수집 프로그램입니다.

‘)
args = parser.parse_args()
“`

– `argparse.ArgumentParser` — 파서 객체 생성
– `prog` — 프로그램 이름
– `description` — 기본 설명
– `parse_args()` — 입력받은 아규먼트를 반환

기본 도움말 기능 실행 결과:
기본 내장 옵션 [ -h | –help ] 도움말 옵션 제공한다.

`-h` 또는 `–help` 옵션을 넣을 경우 `sys.exit()` 가 자동 호출되어 프로그램이 멈춘다.

### argparse 응용 기능 – 버전 정보 출력하기
프로그램 버전 정보를 출력하는 옵션 추가

“`python
if __name__ == “__main__”:
parser = argparse.ArgumentParser(prog=’BSAuto’, description=’안녕하세요. 자동 수집 프로그램입니다.

‘)
parser.add_argument(‘-v’, ‘–version’, action=’version’, version=’%(prog)s 1.0.0′)
args = parser.parse_args()
“`

– `argparse.ArgumentParser` — 파서 객체 생성
– `add_argument()` — 옵션 추가
– `action` — 명령행에서 이 인자가 발견될 때 수행 할 액션의 기본형
– `store` — 인자 값을 저장
– `store_const` — const 키워드 인자에 지정된 값을 저장
– `store_true` — True 저장
– `store_false` — False 저장
– `append` — 리스트를 저장하고 각 인자 값을 리스트에 추가
– `count` — 키워드 인자가 등장한 횟수를 계산
– `help` — 현재 파서의 모든 옵션에 대한 완전한 도움말 메시지를 출력하고 종료
– `version` — 버전 정보를 출력하고 종료

### argparse 응용 기능 – 기능 실행 명령 받기(Boolean)
수집대상의 상태에 따른 실행하기 명령어 개발 – 전체 수집대상 실행, 특정 상태 수집대상 실행 등

“`python
if __name__ == “__main__”:
parser = argparse.ArgumentParser(prog=’BSAuto’, description=’안녕하세요. 자동 수집 프로그램입니다.

‘)
parser.add_argument(‘-a’, ‘–all’, dest=’RUN_JOB_ALL’, action=’store_const’, const=True, help=’모든 수집대상을 대상으로 수집을 시작합니다.

‘)
parser.add_argument(‘-r’, ‘–ready’, dest=’RUN_JOB_READY’, action=’store_const’, const=True, help=’신규 입력된 수집대상을 대상으로 수집을 시작합니다.

‘)
parser.add_argument(‘-e’, ‘–error’, dest=’RUN_JOB_ERROR’, action=’store_const’, const=True, help=’에러가 발생되어 중단되었던 수집대상을 대상으로 수집을 시작합니다.

‘)
args = parser.parse_args()
“`

– `argparse.ArgumentParser` — 파서 객체 생성
– `add_argument()` — 옵션 추가
– `dest` — 파싱된 아규먼트를 저장할 변수 이름
– `const` — action의 `store_const` 옵션이 바라보는 기본값. 아규먼트가 호출될 때 기본값이 저장된다

“`python
run_all_flag = args.RUN_JOB_ALL
run_ready_flag = args.RUN_JOB_READY
run_error_flag = args.RUN_JOB_ERROR

if run_all_flag == True:
print(‘job all start’)
elif run_ready_flag == True:
print(‘job ready start’)
elif run_error_flag == True:
print(‘job error start’)
else:
print(“Insufficient parameters.”)
“`

### argparse 응용 기능 – 기능 실행 조건을 명령 받기(Integer)
특정 번호 또는 숫자를 명령 조건에 따른 실행 명령어 개발 – 특정 순서의 수집대상 실행 – 동시 실행 개수 지정 실행

“`python
if __name__ == “__main__”:
parser = argparse.ArgumentParser(prog=’BSAuto’, description=’안녕하세요. 자동 수집 프로그램입니다.

‘)
parser.add_argument(‘-a’, ‘–all’, dest=’RUN_JOB_ALL’, action=’store_const’, const=True, help=’모든 수집대상을 대상으로 수집을 시작합니다.

‘)
parser.add_argument(‘-n’, ‘–number’, type=int, dest=’RUN_JOB_NUMBER’, help=”동시 실행 개수를 지정합니다.

“)
args = parser.parse_args()
“`

– `argparse.ArgumentParser` — 파서 객체 생성
– `add_argument()` — 옵션 추가
– `type` — 아규먼트의 타입을 지정하고 검사한다

“`python
run_all_flag = args.RUN_JOB_ALL
run_number = args.RUN_JOB_NUMBER

if run_all_flag == True and run_number == None:
print(‘job all start’)
elif run_all_flag == True and run_number != None:
print(“job all start – multi engine size:%d” % (run_number))
elif run_number != None:
print(“job target seq number start – seq:%d” % (run_number))
else:
print(“Insufficient parameters.”)
“`

### argparse 응용 기능 – 기능 실행 조건을 명령 받기(String)
특정 문자열 조건에 따른 실행 명령어 개발 – 특정 검색어, 특정 주소를 조건으로 데이터 수집 실행

“`python
if __name__ == “__main__”:
parser = argparse.ArgumentParser(prog=’BSAuto’, description=’안녕하세요. 자동 수집 프로그램입니다.

‘)
parser.add_argument(‘-a’, ‘–all’, dest=’RUN_JOB_ALL’, action=’store_const’, const=True, help=’모든 수집대상을 대상으로 수집을 시작합니다.

‘)
parser.add_argument(‘-k’, ‘–keyword’, type=str, dest=’SEARCH_KEYWORD’, help=’검색어가 포함된 결과를 제공합니다.

‘)
args = parser.parse_args()
“`

– `argparse.ArgumentParser` — 파서 객체 생성
– `add_argument()` — 옵션 추가
– `type` — 아규먼트의 타입을 지정하고 검사한다

“`python
run_all_flag = args.RUN_JOB_ALL
search_keyword = args.SEARCH_KEYWORD

if run_all_flag == True and search_keyword == None:
print(‘job all start’)
elif run_all_flag == True and search_keyword != None:
print(“job all start – search_keyword:%s” % (search_keyword))
else:
print(“Insufficient parameters.”)
“`

### 참고 링크
– [Python argparse 공식 문서](https://docs.python.org/ko/3/library/argparse.html)
– [Argparse 사용 방법 예제](https://supermemi.tistory.com/69)

이상으로 Python argparse의 기본 사용법과 응용 기능에 대해 설명했습니다.

부족한 부분이나 추가적인 질문이 있으시면 댓글로 남겨주세요. 감사합니다.