gpt4 book ai didi

python - 如何知道 optparse 选项是在命令行中传递的还是作为默认选项传递的

转载 作者:太空狗 更新时间:2023-10-29 20:50:46 26 4
gpt4 key购买 nike

使用 python optparse.py,有没有办法确定特定选项值是从命令行还是从默认值设置的。

理想情况下,我希望有一个像默认值一样的字典,但包含实际从命令行提供的选项

我知道您可以将每个选项的值与默认值进行比较,但这无法区分通过命令行传递的值是否与默认值匹配。

谢谢!


编辑

抱歉,我原来的措辞不是很清楚。

我有大量从批处理文件中调用的脚本。出于审计目的,我想报告正在传递的选项,以及它们是否从命令行、默认值或其他方式传递到日志文件。

使用默认值您可以判断一个选项是否与默认值匹配,但这仍然不能告诉您它是否实际上是从命令行提供的。这可能是相关的:如果从命令行传递一个选项并与默认值一致,如果您随后更改代码中的默认值,脚本仍将获得相同的值。

对我来说,有一个等同于默认值的包含实际提供的值的感觉是很自然的。

为了使问题具体化,在这个例子中:

>>> sys.argv = ['myscript.py','-a','xxx']
>>> import optparse
>>> parser = optparse.OptionParser()
>>> parser.add_option('-a', default = 'xxx')
>>> parser.add_option('-b', default = 'yyy')

我怎么知道选项 a 是从命令行传递的。只能手动解析命令行吗?

(我知道这是一个相当小的问题,但我认为值得一问,以防我在 optparse 上遗漏任何东西)

再次感谢

最佳答案

代替下面的样板代码:

opts, args = parser.parse_args()

如果您使用下面的代码,您将有一个额外的值对象 opts_no_defaults,其中包含由用户明确指定的选项:

opts_no_defaults = optparse.Values()
__, args = parser.parse_args(values=opts_no_defaults)
opts = Values(parser.get_default_values().__dict__)
opts._update_careful(opts_no_defaults.__dict__)

最后,opts 应该与初始样板代码中的相同。

print opts_no_defaults.__dict__
print opts.__dict__
for opt in parser._get_all_options():
if opt.dest:
print "Value of %s: %s" % (opt._long_opts[0], getattr(opts, opt.dest))
print "Is %s specified by user? %s" % (opt._long_opts[0], hasattr(opt_no_defaults, opt.dest))

关于python - 如何知道 optparse 选项是在命令行中传递的还是作为默认选项传递的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2593257/

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