2016-10-11 3 views

답변

0

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.posargs.num 값을 처리해야합니다 (필요한 경우 나는 세부 사항을 추가 할 수 있습니다).

'-10 '입력을 처리 할 수 ​​없습니다.

parser.add_argument('-1') 

을하지만 결과는 당신이 원하는 아마되지 않습니다 : : 글쎄, 난 정의 할 수

In [31]: parser.parse_args(['--num=20','-12']) 
Out[31]: Namespace(1='2', num='20', pos=0) 

점수는이 요구 사항은 프로그래머가 당신을 위해 일을 불필요하게 어렵게 만든다.

+0

답변 해 주셔서 감사합니다. 나는'-10' 형태의 쓸데없는 것에 대해 당신과 동의합니다. 나는 게시 할 때 유닉스'꼬리'명령에 대해 생각하고 있었지만, 이것은 매우 구체적인 사용법이며 마지막에는 여분의 코딩을 할 가치가 없다. 당신이 제안한 것과 같이 상호 배타적 인 그룹의 사용을 고려했지만, 그것은 argparse의 철학 (나는 너무 싫어한다)과 위치와 선택적 논쟁 사이의 명확한 구별을 우회하는 방법이라고 생각한다. . 결국,'argparse'를 유지하기로 결정했다면, 나는 선택적 인자 형식 ('-n','--num')만을 사용할 것이라고 생각합니다. – beppe