我有一个脚本,它有多个用法,具体取决于它收到的参数。例如,如果调用如:
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。
答案 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'之一。
还要注意使用/帮助的外观。考虑一下如何指导用户正确使用。不要太复杂。