Python 2.x optionnal subparsers - 参数错误太少

Luc*_*cas 3 python python-2.7 argparse

我一直在尝试使用两个子解析器来设置一个主解析器,这样当单独调用时,主解析器会显示一条帮助消息.

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"
Run Code Online (Sandbox Code Playgroud)

这段代码在Python 3上运行良好,我希望它能在Python 2.x上运行

运行'python myprogram.py'时我得到了这个

myprogram.py: error: too few arguments
Run Code Online (Sandbox Code Playgroud)

这是我的问题:我如何设法在shell中编写'python myprogram.py'并获取帮助消息而不是错误.

hpa*_*ulj 6

我想你正在处理http://bugs.python.org/issue9253中讨论的bug

subparsers是一个位置论证.除非nargs='?'(或*),否则总是需要这种论证.我认为这就是你在2.7中收到错误消息的原因.

但是在最新的py 3版本中,测试所需参数的方法发生了变化,并且subparsers陷入了困境.现在他们optional(不是必需的).有一个建议的补丁/软糖可以argparse像以前那样表现(需要一个subparser条目).我希望最终py3 argparse将恢复到py2实践(可能选择接受required=False参数).

因此args.sp is None,您可能希望sys.argv[1:]在调用之前进行测试,而不是测试parse_args. Ipython这样做是为了产生它自己的帮助信息.