Python 2.x可选子解析器-错误的参数太少
问题内容:
我一直在尝试用两个子解析器设置一个主解析器,以便当单独调用时,主解析器将显示帮助消息。
def help_message():
print "help message"
import argparse
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(dest='sp')
parser_a = subparsers.add_parser('a')
parser_a.required = False
#some options...
parser_b = subparsers.add_parser('b')
parser_b.required = False
#some options....
args = parser.parse_args([])
if args.sp is None:
help_message()
elif args.sp == 'a':
print "a"
elif args.sp == 'b':
print "b"
这段代码在Python 3上运行良好,我希望在Python 2.x上也可以运行。
运行’python myprogram.py’时出现此错误
myprogram.py: error: too few arguments
这是我的问题:如何在外壳中编写“ python myprogram.py”并获取帮助消息而不是错误。
问题答案:
我认为您正在处理http://bugs.python.org/issue9253中讨论的错误
您subparsers
是一个位置论点。除非nargs='?'
(或*),否则总是需要这种参数。我认为这就是为什么您在2.7中收到错误消息的原因。
但是在最新的py
3发行版中,更改了测试所需参数的方法,并且使次解析器陷入了困境。现在,它们是optional
必需的。有一个建议的补丁/软糖可以argparse
像以前一样运行(需要子解析器条目)。我希望最终py3
argparse会还原为py2实践(可以接受required=False
参数)。
因此args.sp is None
,您可能需要sys.argv[1:]
在致电之前进行测试,而不是进行测试parse_args
。
Ipython
这样做是为了产生自己的帮助消息。