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

时间:2014-06-13 14:29:44

标签: 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"

这段代码适用于Python 3,我希望它能在Python 2.x上运行

我正在运行' python myprogram.py'

myprogram.py: error: too few arguments

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

2 个答案:

答案 0 :(得分:6)

我认为您正在处理http://bugs.python.org/issue9253

中讨论的错误

你的subparsers是一个位置参数。除非nargs='?'(或*),否则始终需要这种参数。我认为这就是你在2.7中收到错误信息的原因。

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

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

答案 1 :(得分:0)

对于其他人 - 我最终在这个页面上试图弄清楚为什么我不能在使用argparse时一般不用参数调用我的脚本。

The tutorial表明可选参数与必需参数之间的差异是在名称中添加“ - ” :

parser.add_argument("--show")  <--- Optional arg
parser.add_argument("show")    <--- Not optional arg