13

いくつかの必須パラメーターといくつかのオプションパラメーターを持つプログラムへの引数が欲しいのですが。このようなもの:

[--print text [color [size]]

したがって、これらのいずれかを渡すことができます。

mycommand --print hello
mycommand --print hello blue
mycommand --print hello red 12

これらは複数存在する可能性があるため、単一のadd_argumentである必要があります。例えば:

[--print text [color]] [--output filename [overwrite]]

私は私が望むものに近い議論を達成することができます:

>>> parser = argparse.ArgumentParser()
>>> act = parser.add_argument('--foo', nargs=3, metavar=('x','y','z'))
>>> act = parser.add_argument('--bar', nargs='?')
>>> act = parser.add_argument('--baz', nargs='*')
>>> parser.print_help()
usage: [-h] [--foo x y z] [--bar [BAR]] [--baz [BAZ [BAZ ...]]]

optional arguments:
  -h, --help            show this help message and exit
  --foo x y z
  --bar [BAR]
  --baz [BAZ [BAZ ...]]

しかし、完全ではありません。argparseでこれを行う方法はありますか?私はそれらをすべて作成できることを知っていますnargs="*"が、-helpはオプションの引数の名前をリストしません。nargs="*"metavarのタプルを渡すと、argparseは例外をスローします。

4

4 に答える 4

7

ソースコード(で始まる)を読んで、take_actionあなたが望むことは不可能だと思います。すべての引数の解析とアクションへの受け渡しはnargsに基づいて行われ、nargsは数値、OPTIONAL( "?")、ZERO_OR_MORE( "*")、ONE_OR_MORE( "+") 、、、PARSERまたはのいずれかREMAINDERです。これは、(入力を処理する)Actionオブジェクトが取得内容を確認する前に決定する必要があるため、動的に把握することはできませんnargs

回避策を講じる必要があると思います。私は多分、、、そして、そして多分また持って--foo-x xいる--foo-y yでしょ--foo-z z--foo x y z

于 2011-03-10T09:17:53.653 に答える
0

それは単一の引数で機能します:

parser.add_argument('--write_google', nargs='?', const='Yes',
                    choices=['force', 'Yes'],
                    help="write local changes to google")
于 2013-04-26T14:15:04.300 に答える