首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用所需的子命令执行argparse

使用所需的子命令执行argparse
EN

Stack Overflow用户
提问于 2013-08-17 05:29:34
回答 3查看 14.8K关注 0票数 37

使用python的argparse,如何使子命令成为必需的参数?我之所以这样做,是因为我想让argparse在没有指定子命令的情况下出错。我重写了error方法以打印帮助。我有3个深度的嵌套子命令,所以这不是简单地在顶层处理零参数的问题。

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

代码语言:javascript
复制
$./simple.py
$

我想让它做的是让argparse报告没有指定所需的子命令:

代码语言:javascript
复制
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()
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-17 07:58:59

在3.3版本中,所需参数的错误消息发生了变化,子命令不复存在。

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

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

代码语言:javascript
复制
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

票数 61
EN

Stack Overflow用户

发布于 2013-08-17 05:32:38

使用required=True怎么样?更多信息here

票数 0
EN

Stack Overflow用户

发布于 2013-08-17 05:37:14

您可以使用add_subparsers()文档的最后一个示例中记录的dest参数

代码语言:javascript
复制
# required_subparser.py
import argparse

parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(dest='subparser_name')
one = subparsers.add_parser('one')
two = subparsers.add_parser('two')

args = parser.parse_args()

使用Python 2.7运行:

代码语言:javascript
复制
$python required_subparser.py 
usage: required_subparser.py [-h] {one,two} ...
required_subparser.py: error: too few arguments
$python required_subparser.py one
$# no error
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18282403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档