gpt4 book ai didi

python - 如何确定是否在命令行上实际指定了 argparse 参数?

转载 作者:太空狗 更新时间:2023-10-29 17:34:09 25 4
gpt4 key购买 nike

我正在使用 arparse 使用在命令行上指定的值来更新配置字典。因为我只想更新命令行中明确提到的值的配置中的值。

因此,如果 getattr(args, action.dest) == action.default 或转换后的 arg 类型是否相等,我会尝试通过检查每个操作来识别未指定的参数。然后我更新字典中的所有值,这是错误的。

但这当然会失败,如果我在命令行上明确指定一个与我的默认参数相同的参数。是否有可能使用 argparser 识别这些明确提到的参数,或者我有在 sys.argv 中手动识别它们?

谢谢!

编辑:

让我的意图更清晰。我有如下论点:

parser.add_argument('--test', default='meaningful_default')

和类似的配置

config = { 'test' : 'nondefault_val'}

现在我只想用明确指定的参数更新配置。将 args 属性与默认值进行比较,只要我不指定类似 prog.py --test meaningful_default 的内容来使用恰好也是默认值的值再次更新我的配置

最佳答案

如果您更喜欢使用 argparse 并能够指定默认值,则有一个使用两个解析器的简单解决方案。

我。定义您的主要解析器并使用适当的默认值解析您的所有参数:

parser = argparse.ArgumentParser()
parser.add_argument('--test1', default='meaningful_default1')
parser.add_argument('--test2', default='meaningful_default2')
...
args, unparsed = parser.parse_known_args()

二。使用 argument_default=argparse.SUPPRESS 定义辅助解析器以排除未指定的参数。添加来自主解析器的所有参数,但没有任何默认值:

aux_parser = argparse.ArgumentParser(argument_default=argparse.SUPPRESS)
for arg in vars(args): aux_parser.add_argument('--'+arg)
cli_args, _ = aux_parser.parse_known_args()

这不是一个非常优雅的解决方案,但可以与 argparse 及其所有优点一起使用。

关于python - 如何确定是否在命令行上实际指定了 argparse 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32056910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com