2012-02-16 2 views
1

내가 args.name()를 사용하는 경우 나는이구별 subparser 인수

example = argparse.ArgumentParser(description='main parser') 
example.add_argument('Kill') 

subexample = example.add_subparsers() 
person = subexample.add_parser('who') 
person.add_argument('name') 
person.add_argument('address') 
animal = subexample.add_parser('what') 
animal.add_argument('name') 

args = parser.parse_args() 

같은 파서가있는 경우, 무엇을 나에게 줄 것입니다, 그래서 좋아? 실제로 원하는 이름을 어떻게 지정할 수 있습니까? args.animal.name()? 나는 확신하지 못한다. 제발 도와주세요. 그리고 동물을 죽이는 것을지지하지 않는 방식으로 나는 생각할 수있는 많은 창조적 인 예를 가지고 있지 않았습니다.

답변

1

사용 set_defaults :

import argparse 

example = argparse.ArgumentParser(description='main parser') 
example.add_argument('Kill') 

subexample = example.add_subparsers() 
person = subexample.add_parser('who') 
person.add_argument('name') 
person.add_argument('address') 
person.set_defaults(kind = 'person') 

animal = subexample.add_parser('what') 
animal.add_argument('name') 
animal.set_defaults(kind = 'animal') 
args = example.parse_args() 
print(args) 

실행 수익률

% test.py 1 who bar baz 
Namespace(Kill='1', address='baz', kind='person', name='bar') 
% test.py 1 what foo 
Namespace(Kill='1', kind='animal', name='foo') 
17:31:52 [email protected]:~/test% 
+0

:

subexample = example.add_subparsers(dest='parser_name') 

그런 다음, 인수를 구문 분석 후로 사용할 수 있습니다. 그렇다면 인수가 사용되었는지 확인하려면 어떻게해야합니까? 사람이나 동물처럼 사용되었습니다. 예 : if (args.person! = None) : print "person 인수가 사용되었습니다!" –

+0

'args.kind'를 확인하십시오 : if (args.kind == 'person') : print ('사람 인수가 사용되었습니다!')' – unutbu

+0

당신의 도움에 감사드립니다! –

0

당신이 documentation에서 볼 수있는 바와 같이, add_subparsers()dest 인수가있다. 이 인수는 서브 파서의 어느 변수 이름을 저장해야하는지 알려줍니다.

코드에서 사용하는 경우 : 난 정말 이해가 안

if args.parser_name == 'who': 
    pass 
elif args.parser_name == 'what': 
    pass