有没有办法识别argparse函数给出的默认值(我使用互斥选项)

时间:2017-05-31 16:11:57

标签: python argparse

现在我使用argparse / configargparse模块为命令行参数的某些参数使用了mutual_exclusive选项的默认值。

这里的问题是,如果我在命令行上传递一个值,我argparse / configargparse会获取参数的值。但是,当我没有在命令行中传递值时,参数将获得argparse / configargparse返回的默认值。

现在我需要在程序中识别参数的值是命令行解析值还是从argparse / configargparse分配的默认值。

以下是使用其中一个答案提供的建议的示例代码。当我运行以下代码时

Case 1: python <file.py> --replace. 
       I am passing from command line.
       so the if loop where i set the default value is not 

执行

    Case 2: python file.py
            I am not passing any  argument here. 
By default "False" is set for "args.replace" and it doesn't go inside the if loop condition  where I am setting up the default value.
  

“代码”

from argparse import ArgumentParser


if __name__ == "__main__":
    myarg_sentinel = object()
    myarg_default = "True"  # The real default

    myarg_sentinel_1 = object()
    myarg_default_1 = "True"  # The real default

    p = ArgumentParser()
    p.add_argument('--myarg', default=myarg_sentinel)
    replace_parser = p.add_mutually_exclusive_group()

    replace_parser.add_argument(
        '--replace', help='Replace during import',
        dest='replace', action='store_true')
    replace_parser.add_argument(
        '--no-replace', help='Do not replace import',
        dest='replace', action='store_false', default=myarg_sentinel_1)

    args = p.parse_args()
    if args.myarg is myarg_sentinel:
        print "----I am setting default val here."
        args.myarg = myarg_default

    print args.replace

    if args.replace is myarg_sentinel_1:
        print "I am setting default val here.----"
        args.replace = myarg_default_1
    print args.myarg, args.replace

1 个答案:

答案 0 :(得分:1)

创建一个唯一的哨兵值作为默认值,然后将实际接收的值与哨兵进行比较。

var attributes = [(attribute: String?, value: Gravl.Node)]()