Argparse-如何指定默认子命令

Argparse-如何指定默认子命令,第1张

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)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5649072.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存