python中config命令_python – argparse augment子命令默认通过全局选项

我希望能够使用argparse.ArgumentParser对象中的全局选项来覆盖/扩充子命令的默认值.

一个例子是显示的帮助反映了全局更新,即以下玩具示例:

import argparse

import os

import sys

# Global parser and options.

parser = argparse.ArgumentParser(

formatter_class=argparse.ArgumentDefaultsHelpFormatter)

parser.add_argument("--user",dest="user",default=os.environ.get("USER"),help="Override the setting of the $USER variable.")

# Sub-command parser and options.

subparsers = parser.add_subparsers()

command = subparsers.add_parser(

"command",formatter_class=argparse.ArgumentDefaultsHelpFormatter)

command.add_argument("--config",dest="config",default="~%s/config" % os.environ.get("USER"),help="The config file.")

options = parser.parse_args()

理想情况下,当我在帮助模式下运行时,我会得到,

> python example.py --user thing command --help

usage: example.py command [-h] [--config CONFIG]

optional arguments:

-h,--help show this help message and exit

--config CONFIG The config file. (default: ~thing/config)

即,配置文件路径是用户特定的(事物).我意识到我可以将默认配置更改为“〜%(user)s / config”,然后在运行时使用options命名空间解决此问题,但我希望帮助更明确.

我收集一个替代解决方案是尝试解析一次参数以获得全局选项,即

if "--help" in sys.argv:

# Parse the command minus the help to obtain the global options.

args = sys.argv[1:]

args.remove("--help")

# Update the defaults with the global options.

options = parser.parse_args(args)

command.set_defaults(config="~%s/config" % options.user)

# Re-parse the options.

parser.parse_args()

虽然这看起来有点hacky.有更好的方法/解决方案吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值