argparse只支持一个命令行选项

5
我正在尝试使用argparse模块创建CLI,但我希望具有不同的命令和不同的参数要求,请看下面的代码示例:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('foo', help='foo help')
parser.add_argument('test', nargs=1, help='test help')
args = parser.parse_args()

我希望能够运行python test.py foopython test.py test somearg,但是当我运行python test.py foo时,出现了error: too few arguments。有没有办法让命令像git statusgit commitpip install一样工作?还是有更好的方法在Python中创建CLI?
3个回答

15

@crodjer 是正确的;
例如:

import argparse
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(title='subcommands', 
                                   description='valid subcommands',
                                   help='additional help')
foo_parser = subparsers.add_parser('foo', help='foo help')
bar_parser = subparsers.add_parser('bar', help='bar help')
bar_parser.add_argument('somearg')
args = parser.parse_args()

测试不同子解析器的参数:

$ python subparsers_example.py bar somearg
Namespace(somearg='somearg')

$ python subparsers_example.py foo
Namespace()

$ python subparsers_example.py foo somearg
usage: argparse_subparsers.py foo [-h]
subparser_example.py foo: error: 无法识别的参数: somearg

帮助输出:

$ python subparsers_example.py foo -h
usage: argparse_subparsers.py foo [-h]
可选参数: -h, --help 显示此帮助信息并退出 $ python subparsers_example.py bar -h usage: argparse_subparsers.py bar [-h] somearg
位置参数: somearg
可选参数: -h, --help 显示此帮助信息并退出

6

0

默认情况下,argparse参数只消耗一个值。如果您想让foo具有不同的行为,您需要指定它。看起来您认为默认值是nargs=0,但实际上并不是这样。根据argparse文档(位于http://docs.python.org/dev/library/argparse.html#nargs):“如果未提供nargs关键字参数,则由操作确定所消耗的args数量。通常这意味着将消耗单个命令行arg,并且将生成单个项目(而不是列表)。”

您可以使用nargs='?'为foo设置默认值,以防没有从命令行提供任何内容,或者使用非默认操作(例如'store_true')。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接