2012-02-16 18 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() 

のようなパーサを持っている場合は、何それは私を与えるために起こっているので、OK?私が実際に望む名前をどのように指定することができますか? 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 
関連する問題