argparse
모듈의 add_argument
메서드는 다양한 옵션을 제공합니다. 이 중에서 metavar
, type
, nargs
에 대해 설명하겠습니다.
metavar
metavar
는 argparse가 생성하는 도움말 메시지에서 인자의 이름을 지정하는 데 사용됩니다. 예를 들어, 인자의 실제 이름 대신 사용자에게 더 이해하기 쉬운 이름을 표시할 수 있습니다.
예제
import argparse
parser = argparse.ArgumentParser(description="Example with metavar")
parser.add_argument('-f', '--file', metavar='FILE', help='Input file')
args = parser.parse_args()
위의 예제에서 -f
또는 --file
인자는 도움말 메시지에 FILE
로 표시됩니다.
$ python script.py -h
usage: script.py [-h] [-f FILE]
Example with metavar
optional arguments:
-h, --help show this help message and exit
-f FILE, --file FILE Input file
type
type
는 인자가 어떤 데이터 타입으로 변환되어야 하는지를 지정합니다. 기본적으로 모든 인자는 문자열로 처리되지만, type
을 지정하면 해당 타입으로 변환됩니다.
예제
import argparse
parser = argparse.ArgumentParser(description="Example with type")
parser.add_argument('integer', type=int, help='An integer value')
args = parser.parse_args()
print(args.integer)
위의 예제에서 integer
인자는 정수로 변환됩니다.
$ python script.py 10
10
$ python script.py ten
usage: script.py [-h] integer
script.py: error: argument integer: invalid int value: 'ten'
nargs
nargs
는 인자가 몇 개의 값을 가질 수 있는지를 지정합니다. 다양한 옵션이 있습니다.
주요 옵션
N
: 정확히 N개의 값을 기대합니다.?
: 0개 또는 1개의 값을 기대합니다.*
: 0개 이상의 값을 기대합니다.+
: 1개 이상의 값을 기대합니다.
예제
import argparse
parser = argparse.ArgumentParser(description="Example with nargs")
parser.add_argument('--list', nargs='+', help='A list of values')
args = parser.parse_args()
print(args.list)
위의 예제에서 --list
인자는 하나 이상의 값을 가집니다.
$ python script.py --list 1 2 3
['1', '2', '3']
$ python script.py --list
usage: script.py [-h] [--list LIST [LIST ...]]
script.py: error: argument --list: expected at least one argument
종합 예제
위에서 설명한 metavar
, type
, nargs
를 모두 사용한 종합적인 예제를 보겠습니다.
import argparse
parser = argparse.ArgumentParser(description="Example with metavar, type, and nargs")
parser.add_argument('-n', '--number', type=int, metavar='NUM', help='An integer number')
parser.add_argument('--list', nargs='+', type=str, metavar='VAL', help='A list of values')
args = parser.parse_args()
print(f"Number: {args.number}")
print(f"List: {args.list}")
이 예제에서는 -n
인자를 정수로 변환하며, 도움말 메시지에 NUM
으로 표시됩니다. --list
인자는 문자열 리스트로 변환되며, 도움말 메시지에 VAL
로 표시됩니다.
$ python script.py -n 5 --list a b c
Number: 5
List: ['a', 'b', 'c']
값의 개수가 0이어야 하는 경우
nargs='0'
는 argparse
에서 지원되지 않습니다. 대신, action='store_true'
또는 action='store_false'
를 사용하여 옵션이 존재하는지 여부를 확인할 수 있습니다. 옵션이 존재하면 True
, 존재하지 않으면 False
가 됩니다.
그러나 nargs='0'
와 같은 동작을 강제하고 싶다면, 기본적인 argparse
의 동작 외에 추가적인 검사를 추가해야 합니다.
방법 1: action='store_true'
또는 action='store_false'
사용
이 방법은 값을 가지지 않고, 단순히 옵션이 있는지 없는지 확인할 때 사용됩니다.
import argparse
parser = argparse.ArgumentParser(description="Example with store_true")
# 값이 없어야 하는 옵션
parser.add_argument('--flag', action='store_true', help='A flag that should not have a value')
args = parser.parse_args()
if args.flag:
print("Flag is set")
else:
print("Flag is not set")
$ python script.py --flag
Flag is set
$ python script.py
Flag is not set
$ python script.py --flag value
usage: script.py [-h] [--flag]
script.py: error: unrecognized arguments: value
방법 2: 추가적인 검사 추가
argparse
로 기본적인 파싱을 수행한 후, 추가적인 검사를 통해 값이 없는지 확인하고, 값이 있으면 에러를 발생시키는 방법입니다.
import argparse
import sys
class MyArgumentParser(argparse.ArgumentParser):
def error(self, message):
sys.stderr.write(f"Error: {message}\n")
self.print_help()
sys.exit(2)
parser = MyArgumentParser(description="Example with additional checks")
# 값이 없어야 하는 옵션
parser.add_argument('--flag', action='store_true', help='A flag that should not have a value')
# 나머지 인자 처리
parser.add_argument('args', nargs=argparse.REMAINDER)
args = parser.parse_args()
# 추가 검사: --flag 다음에 값이 오면 에러를 발생시킵니다.
if args.flag and args.args:
parser.error("--flag option should not have a value")
print("Flag is set" if args.flag else "Flag is not set")
$ python script.py --flag
Flag is set
$ python script.py
Flag is not set
$ python script.py --flag value
usage: script.py [-h] [--flag]
Example with additional checks
optional arguments:
-h, --help show this help message and exit
--flag A flag that should not have a value
Error: --flag option should not have a value
요약
metavar
: 도움말 메시지에 표시될 인자의 이름을 지정합니다.type
: 인자의 타입을 지정하여, 해당 타입으로 변환합니다.nargs
: 인자가 가질 수 있는 값의 개수를 지정합니다.- 값이 없어야 하는 옵션은
action='store_true'
또는action='store_false'
를 사용하여 처리할 수 있습니다. argparse
의 기본 동작 외에 추가 검사를 통해 값이 없는지 확인하고, 값이 있으면 에러를 발생시킬 수 있습니다.
이 두 가지 방법을 사용하여 값이 없어야 하는 옵션을 처리할 수 있습니다.
이 옵션들을 사용하여 더 유연하고 명확한 명령줄 인터페이스를 만들 수 있습니다.
'IT > 파이썬' 카테고리의 다른 글
파일 경로 정리하기 - \, /, ./, .. 문자열 처리 등 (0) | 2024.10.04 |
---|---|
@dataclass 데코레이터와 -> 연산자 소개 (0) | 2024.06.27 |
폴더내 파일리스트를 만드는 스크립트 - 개발 유틸 (0) | 2024.06.20 |
예제 폴더에 들어가는 더미 파일 만들기 스크립트 - 파일명만 있으면 (0) | 2024.06.20 |
Pandas - nan 아닌 값이 나오는 위치 찾기 (0) | 2024.06.14 |