首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python argparse key=value参数

Python argparse key=value参数
EN

Stack Overflow用户
提问于 2013-04-09 12:50:04
回答 2查看 3.7K关注 0票数 3

我试图在堆栈溢出中查找这个问题的答案,但找不到针对我的特定情况的确切答案。

第一个链接在第一部分中有相同的问题,但它没有回答(python argparse: parameter=value)。第二个问题是类似的,但我似乎不能让它适用于我的特定情况( Using argparse to parse arguments of form "arg= val")。

因此,我的情况是这样的--我正在重写一个python包装器,它被许多其他脚本使用(我不希望修改这些其他脚本)。目前,python包装器是使用--key=value形式的命令行参数为许多不同的参数调用的,但都是手动解析的。我想用argparse来解析它们。

注:参数名称很笨拙,因此我使用add_argument中的dest选项进行重命名。

代码语言:javascript
运行
复制
parser = argparse.ArgumentParser(description='Wrappin Ronnie Reagan')
parser.add_argument("--veryLongArgName1", nargs=1, dest="arg1", required=True)
parser.add_argument("--veryLongArgName2", nargs=1,   dest="arg2")
parser.add_argument("--veryLongArgName3", nargs=1,  dest="arg3")
userOpts = vars(parser.parse_args())

它在正确解析传递的命令行的同时,将以下内容显示为帮助:

代码语言:javascript
运行
复制
usage: testing_argsparse.py [-h] --veryLongArgName1 ARG1
                        [--veryLongArgName2 ARG2]
                        [--veryLongArgName3 ARG3]
testing_argsparse.py: error: argument --veryLongArgName1 is required

但我想要的是所有参数都是用--key=value格式指定的,而不是--key value格式。即

代码语言:javascript
运行
复制
usage: testing_argsparse.py [-h] --veryLongArgName1=ARG1
                        [--veryLongArgName2=ARG2]
                        [--veryLongArgName3=ARG3]
testing_argsparse.py: error: argument --veryLongArgName1 is required

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-15 10:56:49

有点晚了,但是对于任何与OP有类似请求的人,您可以使用自定义的HelpFormatter

代码语言:javascript
运行
复制
class ArgFormatter(argparse.HelpFormatter):
    def _format_args(self, *args):
        result = super(ArgFormatter, self)._format_args(*args)
        return result and '%%%' + result

    def _format_actions_usage(self, *args):
        result = super(ArgFormatter, self)._format_actions_usage(*args)
        return result and result.replace(' %%%', '=')

然后可以将其传递给ArgumentParser以提供所需的行为。

代码语言:javascript
运行
复制
parser = argparse.ArgumentParser(
    description='Wrappin Ronnie Reagan',
    formatter_class=ArgFormatter)

这将截取args (ARG1, ARG2, ...)并添加一个自定义前缀,该前缀稍后将被替换为=符号(以及不需要的空格)。return语句中的and确保只有在结果为非空时才修改结果。

票数 1
EN

Stack Overflow用户

发布于 2013-04-09 13:20:04

代码语言:javascript
运行
复制
testing_argsparse.py --veryLongArgName1=foo

很管用。--veryLongArgName1 foo模块接受--veryLongArgName1=foo和argparse两种格式。

您尝试传递给argparse的确切命令行参数是什么,导致它无法工作?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15893540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档