Python argparse:デフォルト値または指定された値


174

フラグのみが存在し、値が指定されていない場合にデフォルトで値になるオプションの引数が必要ですが、ユーザーが値を指定した場合は、デフォルトではなくユーザー指定の値を格納します。これに対してすでに利用可能なアクションはありますか?

例:

python script.py --example
# args.example would equal a default value of 1
python script.py --example 2
# args.example would equal a default value of 2

アクションを作成できますが、これを行うための既存の方法があるかどうかを確認したかったのです。

回答:


272
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--example', nargs='?', const=1, type=int)
args = parser.parse_args()
print(args)

% test.py 
Namespace(example=None)
% test.py --example
Namespace(example=1)
% test.py --example 2
Namespace(example=2)

  • nargs='?' 0または1つの引数を意味します
  • const=1 引数が0の場合のデフォルトを設定します
  • type=int 引数をintに変換します

必要に応じてtest.py設定しexampleていないが、場合でも、1に--example指定され、その後、含まれますdefault=1。つまり、

parser.add_argument('--example', nargs='?', const=1, type=int, default=1)

その後

% test.py 
Namespace(example=1)

文字列でこれを行う方法は?""(デフォルトでは空の文字列)と ""(ユーザーが入力した空の文字列)を区別するジレンマがあります。今のところコードではデフォルトを使用していますが、いくつかの操作を行う必要があるため、次のようなものがありますself.foo = (args.bar or some_else_source).upper()。NoneオブジェクトAFAIUCで壊れます。
0andriy

16

実際には、次のスクリプトのようにdefault引数を使用するだけです。add_argumenttest.py

import argparse

if __name__ == '__main__':

    parser = argparse.ArgumentParser()
    parser.add_argument('--example', default=1)
    args = parser.parse_args()
    print(args.example)

test.py --example
% 1
test.py --example 2
% 2

詳細はこちら


7

違いは:

parser.add_argument("--debug", help="Debug", nargs='?', type=int, const=1, default=7)

そして

parser.add_argument("--debug", help="Debug", nargs='?', type=int, const=1)

したがって:

myscript.py =>デバッグは最初のケースでは7(デフォルトから)で、2番目のケースでは「なし」です。

myscript.py --debug =>デバッグはそれぞれ1

myscript.py --debug 2 =>デバッグはそれぞれ2

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.