您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

5b51 2022/1/14 8:20:56 python 字数 5738 阅读 463 来源 www.jb51.cc/python

我希望能够使用argparse.ArgumentParser对象中的全局选项来覆盖/扩充子命令的默认值.一个例子是显示的帮助反映了全局更新,即以下玩具示例:import argparse import os import sys # Global parser and options. parser = argparse.ArgumentParser(

概述

我希望能够使用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.有更好的方法/解决方案吗?

这与您的替代方案略有不同,但它将所有命令行处理保留在argparse对象中.

(我把你的代码缩减了一点,只是为了缩短它的答案.)

import os
import argparse

# Global preparser and options.
preparser = argparse.ArgumentParser(add_help=False)
preparser.add_argument("--user",default=os.environ.get("USER"))

# ****** NEW *******
options,_ = preparser.parse_kNown_args() # Ignore what we haven't defined yet
user = options.user                       # Use this to define the default of --config

parser = argparse.ArgumentParser(parents=[ preparser ],add_help=True,formatter_class=argparse.ArgumentDefaultsHelpformatter)

# Sub-command parser and options.
subparsers = parser.add_subparsers()

command = subparsers.add_parser("command")

# ****** MODIFIED *******
command.add_argument("--config",default="~%s/config" % (user,))

options = parser.parse_args()

总结

以上是编程之家为你收集整理的python – argparse augment子命令默认通过全局选项全部内容,希望文章能够帮你解决python – argparse augment子命令默认通过全局选项所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶