argparse只有一个命令行选项

时间:2011-06-18 06:30:28

标签: python argparse

我正在尝试使用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 个答案:

答案 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)

这是你可能想要的:

http://docs.python.org/library/argparse.html#sub-commands

通过这个,您可以添加具有自己的参数方案的子参数。

答案 2 :(得分:0)

默认情况下,argparse参数使用一个值。如果您希望foo具有不同的行为,则需要指定它。看起来你认为默认值是nargs = 0,但事实并非如此。从argparse文档(在http://docs.python.org/dev/library/argparse.html#nargs):“如果没有提供nargs关键字参数,则消耗的args数由操作决定。通常这意味着将使用单个命令行arg和单个项目(不是清单)将被制作出来。“

你可以使用nargs ='?' for foo并在命令行没有提供任何内容时给它一个默认值,或使用非默认操作(也许是'store_true'?)。