1

のように自分のプログラムを呼び出したいと思いますprogram -s <optional value>-sデフォルト値を割り当てたいのですが、スイッチが指定されているかどうかも検出できるようにしたいと考えています。私が持っているもの:

max_entries_shown = 10
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-s",
    nargs = '?',
    default = max_entries_shown)
args = parser.parse_args()

これにより、コマンドラインで指定しない場合、および値なしで指定したargs.s場合、10 の値が得られます。私が望むのは、スイッチが指定されていない場合と等しく、指定されたデフォルト値に設定され、次のように実行された場合と等しいです。どうすればこれを達成できますか?-sNone-sargs.sNoneargs.s-sargs.scustom_valueprogram -s custom_value

4

1 に答える 1

2

constの代わりに使用する必要がありdefaultます。constをいつ使用するかについての argparse Python Docs からの引用:

オプション文字列 (-f や --foo など) および nargs='?' を指定して add_argument() が呼び出された場合。これにより、オプションの引数が作成され、その後にゼロまたは 1 つのコマンドライン引数を続けることができます。コマンド ラインを解析するときに、オプション文字列の後にコマンド ライン引数がない場合は、代わりに const の値が想定されます。例については、nargs の説明を参照してください。

type=intさらに、入力を int として扱いたいと想定したため、 a を追加しました。

したがって、コードは次のようになります。

max_entries_shown = 10
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-s",
    nargs = '?',
    const = max_entries_shown,
    type=int)
args = parser.parse_args()

このコードは (印刷引数を使用して) を返します

$ python parse.py
Namespace(s=None)
$ python parse.py -s
Namespace(s=10)
$ python parse.py -s 12
Namespace(s=12)
于 2013-06-24T09:37:31.617 に答える