본문 바로가기
파이썬

파이썬 Python argparse에서 동일한 옵션을 여러 번 사용

by º기록 2020. 11. 7.
반응형

여러 입력 소스를 받아들이고 각각에 대해 뭔가를하는 스크립트를 작성하려고합니다. 이 같은

./my_script.py     -i input1_url input1_name input1_other_var     -i input2_url input2_name input2_other_var     -i input3_url input3_name
# notice inputX_other_var is optional

그러나 argparse 를 사용하여 이것을 수행하는 방법을 알 수 없습니다. 각 옵션 플래그를 한 번만 사용할 수 있도록 설정된 것 같습니다. 여러 인수를 단일 옵션 ( nargs = '*' 또는 nargs = '+')과 연결하는 방법을 알고 있지만 여전히 < code> -i 플래그를 여러 번 사용합니다. 이 작업을 수행하려면 어떻게해야합니까?

명확하게 말하면 마지막으로 원하는 것은 문자열 목록입니다. 그래서

[["input1_url", "input1_name", "input1_other"],
 ["input2_url", "input2_name", "input2_other"],
 ["input3_url", "input3_name"]]

 

해결 방법

 

다음은 metavar 에 정의 된 이름으로 반복되는 2 개의 인수를 선택적으로 처리하는 파서입니다.

parser=argparse.ArgumentParser()
parser.add_argument('-i','--input',action='append',nargs=2,
    metavar=('url','name'),help='help:')

In [295]: parser.print_help()
usage: ipython2.7 [-h] [-i url name]

optional arguments:
  -h, --help            show this help message and exit
  -i url name, --input url name
                        help:

In [296]: parser.parse_args('-i one two -i three four'.split())
Out[296]: Namespace(input=[['one', 'two'], ['three', 'four']])

이것은 2 또는 3 인수 케이스를 처리하지 않습니다 (예전에는 그러한 범위를 처리 할 Python 버그 / 문제에 대한 패치를 작성했지만).

nargs = 3 metavar = ( 'url', 'name', 'other') 로 별도의 인수 정의는 어떻습니까?

튜플 metavar nargs = '+' nargs = '*'와 함께 사용할 수도 있습니다. 두 문자열은 [-u A [B ...]] 또는 [-u [A [B ...]]] 로 사용됩니다.

 

참조 페이지 https://stackoverflow.com/questions/36166225

 

 

반응형

댓글