如何在argparse中管理优先级?

2024-10-03 23:25:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用argparse来管理命令行选项,我想要管理两个选项,--check和{}。 实际上,我在mybadscript.py中做了类似的事情:

[...]
args = parser.parse_args()

if args.check:
    check = True

if args.nocheck:
    check = False
[...]

问题是,如果以这种方式启动脚本:

python mybadscript.py --nocheck --check

check将被设置为False。这是不正确的,因为最后一个选项是--check。在

如何正确管理它们?在

PS:我知道您只使用一个选项就可以很容易地避免它,但是我知道如何使用argparse来管理选项优先级,因为您可以在更复杂的场景中遇到它。在

PPS:建议的答案只是顺便回答了我的问题,但相关的问题不是同一个问题。在


Tags: 命令行pyfalsetrueparserifparsecheck
2条回答

参见argparse documentation。下面是一个你可能想要的例子。我列出了几个你可能不需要的选择——我认为这比不去做而你需要它们要好。在

>>> parser = argparse.ArgumentParser()
>>> group = parser.add_mutually_exclusive_group(required=True)
>>> group.add_argument(' check', action='store_true', dest="check")
>>> group.add_argument(' nocheck', action='store_false', dest="check")
>>> parser.parse_args([" check"])
Namespace(check=True)
>>> parser.parse_args([" nocheck"])
Namespace(check=False)

在这种情况下,您可能不希望互斥部分删除第二行并将group替换为parser。如果您这样做,您可能希望添加以下行:

^{pr2}$

有两个参数分别设置两个不同的名称空间属性args.check和{}。使用 nocheck check输入行,两者都被设置。在

在:

if args.check:
    check = True
if args.nocheck:
    check = False

最后测试nocheck,这样就可以覆盖check。在

argparse尝试以与顺序无关的方式处理选项(标记的参数)。在

如果他们写的是同一个“dest”,这是你最后看到的最后一个。查看输入内容和顺序的一种方法是使用“append”操作:

^{pr2}$

我可以设置默认值[]

^{3}$

另一个答案中配对的“store_true”和“store_false”更简单。在

更好的是,选择一个作为默认选择,并为另一个提供一个选项。只要默认值是明确的,就不需要同时使用这两个参数。在

相关问题 更多 >