我试图用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
但当我运行CCD_ 3时,我得到了CCD_。有没有一种方法可以使命令的行为类似于git status
、git commit
或pip install
?或者有更好的方法在python中创建CLI吗?
@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子分析器_example.py条somearg命名空间(somearg="somearg")$python子分析器_example.py-foo命名空间()$python子分析器_example.py foo somearg用法:argparse_subparsers.py foo[-h]subpasser_example.py-foo:错误:无法识别的参数:somearg
帮助输出:
$python子分析器_example.py foo-h用法:argparse_subparsers.py foo[-h]可选参数:-h、 --帮助显示此帮助消息并退出$python子分析器_example.py bar-h用法:argparse_subparsers.py bar[-h]somearg位置参数:somearg可选参数:-h、 --帮助显示此帮助消息并退出
这就是您可能想要的:
http://docs.python.org/library/argparse.html#sub-命令
有了这个,你可以添加子参数,这些子参数有自己的参数方案。
默认情况下,argparse参数使用一个值。如果你想让foo有不同的行为,你需要指定它。看起来你认为默认值是nargs=0,但事实并非如此。从argparse文档(位于http://docs.python.org/dev/library/argparse.html#nargs):"如果没有提供nargs关键字参数,则消耗的参数数量由操作决定。通常,这意味着将消耗单个命令行参数,并生成单个项目(而不是列表)。"
你可以使用nargs='?'如果命令行没有提供任何内容,请为foo指定一个默认值,或者使用非默认操作(可能是"store_true"?)。