我正在编写一个Python脚本,它需要两个参数和一些选项:
scriptname [-h] [-l] [-q|-d] arg1 arg2
-q
(安静模式) 和 -d
(调试模式) 选项改变了详细程度,-h
选项是由 argparse 自动创建的帮助选项。
我希望 -l
(列表) 选项的行为类似于 -h
选项,即它将不需要强制性参数并列出一些有用信息(与 -h
选项不同)。在实践中,这意味着脚本可以通过以下三种方式调用:
scriptmane [-q|-d] arg1 arg2
scriptname -l
scriptname -h
有两种可能的方法:
- 将参数设置为可选(使用nargs ='?'),并添加代码以验证在没有给出-l或-h选项的所有情况下都有两个参数。
- 编写自定义操作类(不确定细节)。
但我希望有一种更直接的方法来继承“此选项是您所需的全部”行为。
解决方案(基于samwyse的答案):
根据argparse.py中的
_HelpAction()
:class _ListAction(argparse.Action):
def __init__(self,
option_strings,
dest=argparse.SUPPRESS,
default=argparse.SUPPRESS,
help=None):
super(_ListAction, self).__init__(
option_strings=option_strings,
dest=dest,
default=default,
nargs=0,
help=help)
def __call__(self, parser, namespace, values, option_string=None):
print_list()
parser.exit()
然后,在解析器设置期间:
parser.add_argument('-l', '--list', action=_ListAction,
help="List all available cases")