web-dev-qa-db-ja.com

argparseを使用して引数のオプション値を作成するにはどうすればよいですか?

pythonスクリプトを作成しています。ここでは、出力として取得する検索結果の数を操作する引数が必要です。現在、引数に--head。これは私が欲しい機能です:

  1. いつ --headがコマンドラインで渡されないデフォルトで1つの値にしたい。この場合、80のようなかなり大きい

  2. いつ --headは値なしで渡されます。デフォルトで別の値にしたいのですが。この場合、10のような制限されたもの

  3. いつ --headには値が渡されます。渡された値を保存します。

これは問題を説明するいくつかのコードです:

>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('-h',
                        '--head',
                        dest='size',
                        const=80,
                        default=10,
                        action="I don't know",
                        help='Only print the head of the output')
>>> # OFC, that last line will fail because the action is uknown,
... # but here is how I'd like it to work
... parser.parse_args(''.split())
Namespace(size=80)
>>> parser.parse_args('--head'.split())
Namespace(size=10)
>>> parser.parse_args('--head 15'.split())
Namespace(size=15)

このためのカスタムアクションを作成できると思いますが、最初に、これを行うデフォルトの動作があるかどうかを確認します。

39
totokaka

ドキュメントをもう少し読んだ後、私は必要なものを見つけました:nargs='?'。これはstoreアクションで使用され、まさに私が望むことをします。

次に例を示します。

>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--head',
                        dest='size',
                        const=10,
                        default=80,
                        action='store',
                        nargs='?',
                        type=int,
                        help='Only print the head of the output')
>>> parser.parse_args(''.split())
... Namespace(size=80)
>>> parser.parse_args('--head'.split())
... Namespace(size=10)
>>> parser.parse_args('--head 15'.split())
... Namespace(size=15)

ソース: http://docs.python.org/3/library/argparse.html#nargs

55
totokaka