TL; DR
사용자 인터페이스의 작동 방식에 따라 nargs
옵션 또는 옵션 'append'
설정을 사용하십시오 action
.
나르 그
parser.add_argument('-l','--list', nargs='+', help='<Required> Set flag', required=True)
# Use like:
# python arg.py -l 1234 2345 3456 4567
nargs='+'
하나 이상의 인수를 nargs='*'
취하고 0 이상을 취합니다.
덧붙이다
parser.add_argument('-l','--list', action='append', help='<Required> Set flag', required=True)
# Use like:
# python arg.py -l 1234 -l 2345 -l 3456 -l 4567
함께 append
하면 목록을 구축 할 수있는 옵션이 여러 번 제공합니다.
사용하지 마십시오 type=list
! - type=list
함께 사용하고 싶은 상황은 없을 것 입니다 argparse
. 이제까지.
이를 위해 시도 할 수있는 여러 가지 방법과 최종 결과에 대해 자세히 살펴 보겠습니다.
import argparse
parser = argparse.ArgumentParser()
# By default it will fail with multiple arguments.
parser.add_argument('--default')
# Telling the type to be a list will also fail for multiple arguments,
# but give incorrect results for a single argument.
parser.add_argument('--list-type', type=list)
# This will allow you to provide multiple arguments, but you will get
# a list of lists which is not desired.
parser.add_argument('--list-type-nargs', type=list, nargs='+')
# This is the correct way to handle accepting multiple arguments.
# '+' == 1 or more.
# '*' == 0 or more.
# '?' == 0 or 1.
# An int is an explicit number of arguments to accept.
parser.add_argument('--nargs', nargs='+')
# To make the input integers
parser.add_argument('--nargs-int-type', nargs='+', type=int)
# An alternate way to accept multiple inputs, but you must
# provide the flag once per input. Of course, you can use
# type=int here if you want.
parser.add_argument('--append-action', action='append')
# To show the results of the given option to screen.
for _, value in parser.parse_args()._get_kwargs():
if value is not None:
print(value)
기대할 수있는 결과는 다음과 같습니다.
$ python arg.py --default 1234 2345 3456 4567
...
arg.py: error: unrecognized arguments: 2345 3456 4567
$ python arg.py --list-type 1234 2345 3456 4567
...
arg.py: error: unrecognized arguments: 2345 3456 4567
$ # Quotes won't help here...
$ python arg.py --list-type "1234 2345 3456 4567"
['1', '2', '3', '4', ' ', '2', '3', '4', '5', ' ', '3', '4', '5', '6', ' ', '4', '5', '6', '7']
$ python arg.py --list-type-nargs 1234 2345 3456 4567
[['1', '2', '3', '4'], ['2', '3', '4', '5'], ['3', '4', '5', '6'], ['4', '5', '6', '7']]
$ python arg.py --nargs 1234 2345 3456 4567
['1234', '2345', '3456', '4567']
$ python arg.py --nargs-int-type 1234 2345 3456 4567
[1234, 2345, 3456, 4567]
$ # Negative numbers are handled perfectly fine out of the box.
$ python arg.py --nargs-int-type -1234 2345 -3456 4567
[-1234, 2345, -3456, 4567]
$ python arg.py --append-action 1234 --append-action 2345 --append-action 3456 --append-action 4567
['1234', '2345', '3456', '4567']
테이크 아웃 :
- 사용
nargs
또는action='append'
nargs
사용자 관점에서 더 간단 할 수 있지만 위치 인수 argparse
가 있어야하는 위치와 위치 인수가 무엇인지 알 수 없기 때문에 위치 인수가 있으면 직관적이지 않을 수 있습니다 nargs
. 위치 인수가 있으면 action='append'
더 나은 선택이 될 수 있습니다.
- 경우 위의 사실이 아니라
nargs
주어진 '*'
, '+'
또는 '?'
. 정수 숫자 (예 :)를 제공하면 옵션에 대해 예상되는 값의 수를 정확히 알 수 4
있으므로 옵션 nargs
과 위치 인수를 혼합하는 데 문제가 없습니다 argparse
.
- 명령 행에 따옴표를 사용하지 마십시오 1
type=list
목록의 목록을 반환하므로를
사용하지 마십시오
- 이것은 후드 아래에서 모든 인수의 집계가 아니라 선택한 개별 인수에 대해 개별 인수 를 강제하기 위해
argparse
의 값을 사용 하기 때문 입니다.type
type
type=int
int (또는 무엇이든) 목록을 얻기 위해 (또는 무엇이든) 사용할 수 있습니다
1 : 나는 일반적으로 의미하지 않습니다 .. 목록을 전달하기argparse
위해 따옴표를 사용 하는 것은 당신이 원하는 것이 아닙니다.