위치 인수 또는 선택적 인수로 전달되는 필수 명령 줄 인수가 필요합니다. 예를 들어 다음과 같은 호출에서 동일한 작업을 수행하고 싶습니다.argparse : 동일한 필수 인수를 위치 또는 선택적으로 사용하십시오.
prog 10
prog -10
prog -n 10
prog --num 10
argparse에서도 가능합니까?
대화 형 세션에서 : 나는 합리적인 근사치를 만들 수있는 상호 배타적 인 그룹
위치 인수 또는 선택적 인수로 전달되는 필수 명령 줄 인수가 필요합니다. 예를 들어 다음과 같은 호출에서 동일한 작업을 수행하고 싶습니다.argparse : 동일한 필수 인수를 위치 또는 선택적으로 사용하십시오.
prog 10
prog -10
prog -n 10
prog --num 10
argparse에서도 가능합니까?
대화 형 세션에서 : 나는 합리적인 근사치를 만들 수있는 상호 배타적 인 그룹
In [10]: parser=argparse.ArgumentParser()
In [11]: grp=parser.add_mutually_exclusive_group(required=True)
In [12]: a=grp.add_argument('pos',nargs='?',type=int,default=0)
In [13]: b=grp.add_argument('-n','--num')
grp
는 선택적 항목 수, 하나 개의 선택 위치를 포함 할 수 있습니다. 차이를 강조 표시 한 위치에 대해 다른 type
을 선택했습니다. 필요한
In [16]: parser.parse_args(['-n10'])
Out[16]: Namespace(num='10', pos=0)
In [17]: parser.parse_args(['--num=10'])
Out[17]: Namespace(num='10', pos=0)
In [18]: parser.parse_args(['--num','10'])
Out[18]: Namespace(num='10', pos=0)
시험 군 독점
In [25]: parser.parse_args(['--num=20','10'])
usage: ipython3 [-h] [-n NUM] [pos]
ipython3: error: argument pos: not allowed with argument -n/--num
그룹 :
단지 위치 값 : 옵션의
In [14]: parser.parse_args(['10'])
Out[14]: Namespace(num=None, pos=10)
다양한 형태
In [26]: parser.parse_args([])
usage: ipython3 [-h] [-n NUM] [pos]
ipython3: error: one of the arguments pos -n/--num is required
동일한 위치에 동일한 문자로 dest
을 입력하여 실험 했으므로 - 둘 다 num
에 기록합니다. 그러나이 기본으로 dest
를 작성을 통해 위치 결과
In [19]: a.dest
Out[19]: 'pos'
In [20]: a.dest='num'
In [21]: parser.parse_args(['--num','10'])
Out[21]: Namespace(num=0)
포스트 구문 분석 코드가 적 방법으로 의미가 무엇인지에 args.pos
및 args.num
값을 처리해야합니다 (필요한 경우 나는 세부 사항을 추가 할 수 있습니다).
'-10
'입력을 처리 할 수 없습니다.
parser.add_argument('-1')
을하지만 결과는 당신이 원하는 아마되지 않습니다 : : 글쎄, 난 정의 할 수
In [31]: parser.parse_args(['--num=20','-12'])
Out[31]: Namespace(1='2', num='20', pos=0)
점수는이 요구 사항은 프로그래머가 당신을 위해 일을 불필요하게 어렵게 만든다.
답변 해 주셔서 감사합니다. 나는'-10' 형태의 쓸데없는 것에 대해 당신과 동의합니다. 나는 게시 할 때 유닉스'꼬리'명령에 대해 생각하고 있었지만, 이것은 매우 구체적인 사용법이며 마지막에는 여분의 코딩을 할 가치가 없다. 당신이 제안한 것과 같이 상호 배타적 인 그룹의 사용을 고려했지만, 그것은 argparse의 철학 (나는 너무 싫어한다)과 위치와 선택적 논쟁 사이의 명확한 구별을 우회하는 방법이라고 생각한다. . 결국,'argparse'를 유지하기로 결정했다면, 나는 선택적 인자 형식 ('-n','--num')만을 사용할 것이라고 생각합니다. – beppe