명령행(command line)에서 파이썬을 실행시킬 때 argparse 모듈을 이용하여 인자를 받는 방법을 소개합니다.
1. argparse로 인자 받기
아래 예제처럼 원하는 옵션 이름으로 명령행에서 인자를 받을 수 있습니다.
argparse.ArgumentParser()
로 parser 생성add_argument()
으로 어떻게 파싱할 것인지 옵션을 설정할 수 있음, 첫번째 인자는-n
처럼 짧은 형태의 옵션이며, 두번째 인자는--name
처럼 긴 형태의 옵션parse_args()
호출 시, 설정된 내용으로 인자를 파싱-n
또는--name
으로 입력 받은 내용은args.print
처럼 옵션 이름으로 변수 접근이 가능함- 헬프 옵션 (
-h
,--help
)은 기본으로 제공됨
#!/usr/bin/python
import argparse
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('-n', '--name', help="input your name")
parser.add_argument('-p', '--print', action='store_true', help="shows name")
args = parser.parse_args()
if args.print:
print(f"name: {args.name}")
아래와 같이 인자를 입력하면, args.name = John
으로 입력되며, args.print = True
가 됩니다. -p
의 경우 action에 store_true
를 입력했기 때문에 명령행에 -p
를 입력하면 print = True
로 설정되며, -p
를 입력하지 않으면 print = False
로 설정됩니다.
$ python main.py -n John -p
name: John
-h
는 헬프 명령어인데, 기본적인 내용이 있고 여기에 add_argument()
에 추가한 옵션도 함께 보여집니다.
-h
에서 보이는 메시지는 add_argument()
의 help로 전달한 메시지가 됩니다.
$ python main.py -h
usage: main.py [-h] [-n NAME] [-p]
optional arguments:
-h, --help show this help message and exit
-n NAME, --name NAME input your name
-p, --print shows name
2. 필수 옵션 설정
만약 어떤 옵션은 꼭 사용자가 설정해야 할 필요가 있을 때, required=True
를 설정하면 사용자가 입력하지 않았을 때 에러가 발생되며, 입력해야 한다는 메시지가 발생합니다.
#!/usr/bin/python
import argparse
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('-n', '--name', help="input your name", required=True)
parser.add_argument('-p', '--print', action='store_true', help="shows name")
args = parser.parse_args()
if args.print:
print(f"name: {args.name}")
아래와 같이 -n
을 입력하지 않으면 에러가 발생합니다.
$ python main.py -p
usage: main.py [-h] -n NAME [-p]
main.py: error: the following arguments are required: -n/--name
3. 짧은 옵션(short option)만 사용, 변수 이름 변경
아래 예제처럼 short option -n
만 사용할 수 있습니다. 인자는 args.n
변수로 접근할 수 있습니다.
#!/usr/bin/python
import argparse
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('-n', help="Your name")
args = parser.parse_args()
print(f"name: {args.n}")
이런 변수 이름이 직관적이지 않을 때, dest=
로 변수 이름을 변경할 수 있습니다.
아래 예제에서는 dest='name'
으로 변수 이름을 name으로 변경하였습니다.
#!/usr/bin/python
import argparse
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('-n', dest='name', help="Your name")
args = parser.parse_args()
print(f"name: {args.name}")
아래와 같이 명령어를 입력했을 때, name에 인자가 저장되는 것을 볼 수 있습니다.
$ python main.py -n John
name: John
4. Positional Arguments
-n
같은 옵션 이름을 설정하지 않고, 그냥 명령행에 인자를 연속적으로 입력하고, 프로그램은 해당 위치마다 특정 값으로 인식하여 처리할 수 있습니다.
아래와 같이 add_argument()
에 이름만 지정해주면 됩니다.
#!/usr/bin/python
import argparse
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('id')
parser.add_argument('pw')
args = parser.parse_args()
print(f"id: {args.id}")
print(f"pw: {args.pw}")
터미널에서 인자를 전달할 때 아래와 같이 인자 두개를 입력하면, 프로그램에서 순차적으로 id와 pw로 읽어서 처리합니다.
$ python main.py john1234 abcd4444
id: john1234
pw: abcd4444
5. Integer, String, Boolean으로 인자 받기
add_argument()
에type=int
를 지정하면, 인자를 정수로 받습니다.- 아무것도 입력하지 않으면 문자열로 받습니다.
- 옵션 입력 여부에 따라 True/False로 boolean을 받고 싶을 때, action에
store_true
를 지정합니다.
#!/usr/bin/python
import argparse
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('-i', '--integer', type=int)
parser.add_argument('-s', '--string')
parser.add_argument('-b', '--boolean', action='store_true')
args = parser.parse_args()
print(f"i: {args.integer}, type: {type(args.integer)}")
print(f"s: {args.string}, type: {type(args.string)}")
print(f"b: {args.boolean}, type: {type(args.boolean)}")
아래와 같이 옵션을 입력했을 때, 결과는 다음과 같습니다.
$ python main.py -i 100 -s abcd -b
i: 100, type: <class 'int'>
s: abcd, type: <class 'str'>
b: True, type: <class 'bool'>
-b
를 입력하지 않으면 boolean은 False로 설정됩니다.
$ python main.py -i 100 -s abcd
i: 100, type: <class 'int'>
s: abcd, type: <class 'str'>
b: False, type: <class 'bool'>
Related Posts
- Python - Yaml 파일 파싱하는 방법
- Python - 파일 내용 삭제
- Python - for문에서 리스트 순회 중 요소 값 제거
- Python - 두 리스트에서 공통 요소 값 찾기
- Python - 문자열 앞(뒤)에 0으로 채우기
- Python - 공백으로 문자열 분리
- Python - 중첩 리스트 평탄화(1차원 리스트 변환)
- Python - 16진수 문자열을 Int로 변환
- Python - 두 날짜, 시간 비교
- Python f-string으로 변수 이름, 값 쉽게 출력 (변수명 = )
- Python - nonlocal과 global 사용 방법
- Python 바다코끼리 연산자 := 알아보기
- Python - pip와 requirements.txt로 패키지 관리
- Python - 딕셔너리 보기 좋게 출력 (pprint)
- Python - Requests 사용 방법 (GET/POST/PUT/PATCH/DELETE)
- Python - 온라인 컴파일러 사이트 추천
- Python - os.walk()를 사용하여 디렉토리, 파일 탐색
- Python - 문자열 비교 방법
- Python - Text 파일 읽고 쓰는 방법 (read, write, append)
- Python - 리스트에서 첫번째, 마지막 요소 가져오는 방법
- Python - 두개의 리스트 하나로 합치기
- Python - 리스트의 마지막 요소 제거
- Python - 리스트의 첫번째 요소 제거
- Python 소수점 버림, 4가지 방법
- Python 코드 안에서 버전 확인 방법
- Python 소수점 반올림, round() 예제
- Python - 리스트 평균 구하기, 3가지 방법
- Python - bytes를 String으로 변환하는 방법
- Python - String을 bytes로 변환하는 방법
- Python 버전 확인 방법 (터미널, cmd 명령어)
- Python - 람다(Lambda) 함수 사용 방법
- Python - dict 정렬 (Key, Value로 sorting)
- Python - range() 사용 방법 및 예제
- Python - 리스트를 문자열로 변환
- Python - 문자를 숫자로 변환 (String to Integer, Float)