argparse用于有条件的可选参数

时间:2017-01-30 23:49:24

标签: python python-3.5 argparse

我有一个脚本,它有多个用法,具体取决于它收到的参数。例如,如果调用如:

script.py

它将执行其主要功能。但我也希望它能够运行其他 功能:

script.py -a

将进入交互模式。

script.py -r -f filename.txt

应该使用文件重新启动货架。

script.py -e -f filename.txt

应该使用该文件扩展搁置。

我的问题是我希望-f标志是可选的,除非-r或-e 标志存在。

我目前的代码:

parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()
group.add_argument("-a", action="store_true")
group.add_argument("-r", action="store_true")
group.add_argument("-e", action="store_true")

现在,我不知道-f标志是如何适应的。我正在使用Python 3.5。

1 个答案:

答案 0 :(得分:1)

如果添加

parser.add_argument('-f','--file',help='filename')

然后将始终接受-f filename命令并将其存在于命名空间中,例如

Namespace(file='filename', a=False, r=True, e=False)

如果省略,您会看到file=None

一种选择是在给定和需要时使用添加的信息,如果您不需要则忽略。您可能还希望为其提供有用的default值(对于用户不提供姓名的情况)。

另一种可能性是将-r定义为

group.add_argument(' -r',help =' r mode filename')

然后,而不是args.r是真/假,它将是'无/'文件名'。

您可能需要更具体地了解filename可选的含义。什么时候选择,要求和/或禁止。

您也可以转到subparsers路线,并为-f和' e'定义r参数。 subparsers,但不是' a'之一。

还要注意使用/帮助的外观。考虑一下如何指导用户正确使用。不要太复杂。