小编Wil*_*ley的帖子

Argparse - 如何指定默认子命令

我正在使用Python 2.7的argparse包为命令行工具编写一些选项解析逻辑.该工具应接受以下参数之一:

"ON":打开一个功能.
"关":关闭一个功能.
[无参数提供]:回显函数的当前状态.

查看argparse文档让我相信我想要定义两个 - 可能是三个 - 子命令,因为这三个状态是互斥的,代表不同的概念活动.这是我目前对代码的尝试:

parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
parser.set_defaults(func=print_state) # I think this line is wrong.

parser_on = subparsers.add_parser('ON')
parser_on.set_defaults(func=set_state, newstate='ON')

parser_off = subparsers.add_parser('OFF')
parser_off.set_defaults(func=set_state, newstate='OFF')

args = parser.parse_args()

if(args.func == set_state):
    set_state(args.newstate)
elif(args.func == print_state):
    print_state()
else:
    args.func() # Catchall in case I add more functions later
Run Code Online (Sandbox Code Playgroud)

我的印象是,如果我提供了0个参数,主解析器就会设置func=print_state,如果我提供了1个参数,主解析器将使用相应的子命令的默认值并调用func=set_state.相反,我得到0参数的以下错误:

usage: cvsSecure.py [-h] {ON,OFF} ...
cvsSecure.py: error: too few arguments
Run Code Online (Sandbox Code Playgroud)

如果我提供"OFF"或"ON",则print_state调用而不是set_state.如果我注释掉该parser.set_defaults行,set_state则被正确调用. …

python argparse

20
推荐指数
1
解决办法
1万
查看次数

标签 统计

argparse ×1

python ×1