2012-08-17 11 views
7

私はコマンドラインインターフェイスでタイプされたパラメータを解析するためにPythonでargparseモジュールを使用しています。Python argparse:metavarとaction = store_trueを一緒に

submit_parser.add_argument('-pv','--provision',metavar='PROVISION', dest='PROVISION', 
           help='provision system', 
           action='store_true', default=False, required=False) 

私はこのエラーを取得する:

Traceback (most recent call last): 
    File "./scripts/tp4", line 94, in <module> 
    main() 
    File "./scripts/tp4", line 74, in main 
    modloader.loadModules(sub_parsers) 
    File "/usr/lib/python2.6/site-packages/tp4/cli/Moduleloader.py", line 66, in loadModules 
    registered_modules[module_name].setSubparserArgs(module_sub_parser) 
    File "/usr/lib/python2.6/site-packages/tp4/cli/modules/AutotestModule.py", line 135, in setSubparserArgs 
    action='store_true', default=False, required=False) 
    File "/usr/share/tp4/cli/zip/argparse.zip/argparse.py", line 1302, in add_argument 
    TypeError: __init__() got an unexpected keyword argument 'metavar' 

私はアクションやmetavarパラメータを削除した場合、それが動作私はsubparserオブジェクトに次のadd_argumentのコールを持っています。なぜ両方が一緒にできないのですか? argparseのマニュアルでは、この制限については何もありませんhttp://docs.python.org/dev/library/argparse.html。任意の助けを事前に

おかげ

+0

pythonのバージョン....チェックするべき重要なことです.... – avasal

+0

あなたは尋ねたことはありませんが、 'action'が' 'store_true''ならば、デフォルト値は既に' False'です。 '' store_false'''がデフォルト値は '' True''です)。 'optparse'とは​​異なりますが(どちらの場合でもデフォルトは' None'です)、かなり便利です。 – torek

答えて

13

metavarのみ位置引数のために(コマンドラインの末尾にファイル名だと思う)、または引数が(--input-files foo.txt bar.txtのような)は、独自の引数を取るときのために理にかなっています。

引数は、actionstore_trueに設定したため、フラグです。引数をとりません(nargsが設定されていません)。したがって、メタバールを持つことは意味をなさない。 the argparse documentationから

:@pwcからの回答を抽出するために

When ArgumentParser generates help messages, it need some way to refer to each expected argument. By default, ArgumentParser objects use the dest value as the “name” of each object. By default, for positional argument actions, the dest value is used directly, and for optional argument actions, the dest value is uppercased. So, a single positional argument with dest='bar' will be referred to as bar. A single optional argument --foo that should be followed by a single command-line argument will be referred to as FOO.

+3

ありがとうございます。ただし、この情報はargparseのドキュメントでは明示的ではありません。 –

+3

疎なPythonドキュメントの場合、私はPYMOTWのウェブサイトから答えを得ることになります。http://pymotw.com/2/argparse/ – qneill

+2

私が本当に欲しいのは、 'dest ='だったときに 'metavar ='を使っていました。 – aldo

-2

、あなたはdestの代わりmetavarを使用する必要があります。

関連する問題