4

我正在尝试使用 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 status,git commitpip install?还是有更好的方法在 python 中创建 CLI?

4

3 回答 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
命名空间(somearg='somearg')

$ python subparsers_example.py foo
命名空间()

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

帮助输出:

$ python subparsers_example.py foo -h
用法:argparse_subparsers.py foo [-h]

可选参数:
  -h, --help 显示此帮助信息并退出

$ python subparsers_example.py bar -h
用法:argparse_subparsers.py bar [-h] somearg

位置参数:
  一些参数

可选参数:
  -h, --help 显示此帮助信息并退出
于 2011-06-18T07:08:41.100 回答
6

这可能是您想要的:

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

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

于 2011-06-18T06:59:10.040 回答
0

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

您可以使用 nargs='?' 对于 foo 并给它一个默认值,以防命令行没有提供任何内容,或者使用非默认操作(可能是“store_true”?)。

于 2011-06-18T07:03:58.337 回答