使用python的argparse,如何使子命令成为必需参数?我想这样做是因为如果未指定子命令,我希望argparse出错。我改写了错误方法来打印帮助。我有3个深层嵌套的子命令,因此这不是简单地在顶层处理零参数的问题。

在下面的示例中,如果这样调用,我得到:

$./simple.py
$

我想要它做的是让argparse提示未指定所需的子命令:
import argparse

class MyArgumentParser(argparse.ArgumentParser):
    def error(self, message):
        self.print_help(sys.stderr)
        self.exit(0, '%s: error: %s\n' % (self.prog, message))

def main():
    parser = MyArgumentParser(description='Simple example')
    subs = parser.add_subparsers()
    sub_one = subs.add_parser('one', help='does something')
    sub_two = subs.add_parser('two', help='does something else')

    parser.parse_args()

if __name__ == '__main__':
    main()

最佳答案

错误消息中针对必需参数的3.3进行了更改,子命令迷失了方向。

http://bugs.python.org/issue9253#msg186387

我建议您解决此问题,在定义required之后设置subparsers属性。

parser = ArgumentParser(prog='test')
subparsers = parser.add_subparsers()
subparsers.required = True
subparsers.dest = 'command'
subparser = subparsers.add_parser("foo", help="run foo")
parser.parse_args()

更新

相关的拉取请求:https://github.com/python/cpython/pull/3027

10-02 08:17