我一直在尝试设置一个带有两个子解析器的主解析器,以便在单独调用时,主解析器会显示一条帮助消息。
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
这是我的问题:我如何在 shell 中编写“python myprogram.py”并获取帮助消息而不是错误。
我认为您正在处理中讨论的错误http://bugs.python.org/issue9253
Your subparsers
是一个位置论证。这种论证总是需要的,除非nargs='?'
(或者 *)。我认为这就是您在 2.7 中收到错误消息的原因。
但在最新的 py 3 版本中,测试所需参数的方法发生了变化,并且子解析器被忽略了。现在他们是optional
(非必需)。有一个建议的补丁/软糖可以制作argparse
行为与以前一样(需要子解析器条目)。我预计最终 py3 argparse 将恢复到 py2 实践(可以选择接受required=False
范围)。
所以而不是测试args.sp is None
,你可能想测试sys.argv[1:]
打电话之前parse_args
. Ipython
这样做是为了产生它自己的帮助消息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)