栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Argparse-如何指定默认子命令

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Argparse-如何指定默认子命令

顶级解析器的默认值将覆盖子解析器的默认值,因此将

func
忽略在子解析器上设置默认值,但是
newstate
来自子解析器默认值的值是正确的。

我认为您不想使用子命令。当可用选项和位置参数根据所选择的子命令而变化时,将使用子命令。但是,您没有其他选项或位置参数。

以下代码似乎可以满足您的要求:

import argparsedef print_state():    print "Print state"def set_state(s):    print "Setting state to " + sparser = argparse.ArgumentParser()parser.add_argument('state', choices = ['ON', 'OFF'], nargs='?')args = parser.parse_args()if args.state is None:    print_state()elif args.state in ('ON', 'OFF'):    set_state(args.state)

注意的可选参数

parser.add_argument
。“ choices”参数指定允许的选项,同时将“ nargs”设置为“?”
指定应使用1个参数(如果可用),否则不使用。

编辑:
如果要添加带有参数的FORCE命令,并为ON和OFF命令提供单独的帮助文本,则需要使用子命令。不幸的是,似乎没有指定默认子命令的方法。但是,您可以通过检查空的参数列表并提供自己的参数来解决此问题。这是一些示例代码,说明了我的意思:

import argparseimport sysdef print_state(ignored):    print "Print state"def set_state(s):    print "Setting state to " + sparser = argparse.ArgumentParser()subparsers = parser.add_subparsers()on = subparsers.add_parser('ON', help = 'On help here.')on.set_defaults(func = set_state, newstate = 'ON')off = subparsers.add_parser('OFF', help = 'Off help here.')off.set_defaults(func = set_state, newstate = 'OFF')prt = subparsers.add_parser('PRINT')prt.set_defaults(func = print_state, newstate = 'N/A')force = subparsers.add_parser('FORCE' , help = 'Force help here.')force.add_argument('newstate', choices = [ 'ON', 'OFF' ])force.set_defaults(func = set_state)if (len(sys.argv) < 2):    args = parser.parse_args(['PRINT'])else:    args = parser.parse_args(sys.argv[1:])args.func(args.newstate)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/646872.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号