现在我使用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
答案 0 :(得分:1)
创建一个唯一的哨兵值作为默认值,然后将实际接收的值与哨兵进行比较。
var attributes = [(attribute: String?, value: Gravl.Node)]()