我正在尝试使用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 foo
和python test.py test somearg
但是当我运行python test.py foo
时,我得到error: too few arguments
。有没有一种方法可以使命令的行为类似于git status
,git commit
或pip install
?或者有更好的方法在python中创建CLI吗?
答案 0 :(得分: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()
测试每个subparser的不同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: unrecognized arguments: somearg
帮助输出:
$ python subparsers_example.py foo -h usage: argparse_subparsers.py foo [-h] optional arguments: -h, --help show this help message and exit $ python subparsers_example.py bar -h usage: argparse_subparsers.py bar [-h] somearg positional arguments: somearg optional arguments: -h, --help show this help message and exit
答案 1 :(得分:6)
答案 2 :(得分:0)
默认情况下,argparse参数使用一个值。如果您希望foo具有不同的行为,则需要指定它。看起来你认为默认值是nargs = 0,但事实并非如此。从argparse文档(在http://docs.python.org/dev/library/argparse.html#nargs):“如果没有提供nargs关键字参数,则消耗的args数由操作决定。通常这意味着将使用单个命令行arg和单个项目(不是清单)将被制作出来。“
你可以使用nargs ='?' for foo并在命令行没有提供任何内容时给它一个默认值,或使用非默认操作(也许是'store_true'?)。