python从命令行将多个键值(dict)读入变量

2024-05-14 13:10:33 发布

您现在位置:Python中文网/ 问答频道 /正文

在Perl中,可以使用Getopt::Long将多个key=value对读入变量(a hash)(请参见here

基本上说

 GetOptions ("define=s" => \%defines);
 And on command line: <prog> --define os=linux --define vendor=redhat

我已经在Python中寻找了一个等价物,但是到目前为止还没有发现任何一个[argparse]不能从bashshell轻松地看到type=dict in argparse.add_argument()。虽然我可以通过读入参数并从中以编程方式创建一个字典来解决这个问题,但我只想知道一种干净而简单的方法(就像Perl一样)


Tags: andkeyherevalueonlineargparsehash
1条回答
网友
1楼 · 发布于 2024-05-14 13:10:33

argparse与自定义操作一起使用:

import argparse
import copy


class DictAction(argparse.Action):
    def __call__(self, parser, namespace, values, option_string=None):
        try:
            k, v = values.split("=", 1)
        except ValueError:
            raise argparse.ArgumentError(self, "Format must be key=value")

        # Implementation is from argparse._AppendAction
        items = copy.copy(argparse._ensure_value(namespace, self.dest, {}))  # Default mutables, use copy!
        items[k] = v
        setattr(namespace, self.dest, items)

# Usage:
parser = argparse.ArgumentParser()
parser.add_argument(" define", action=DictAction)

print parser.parse_args(" define k=v  define x=y".split())
# Gives
# Namespace(d={'x': 'y', 'k': 'v'})

print parser.parse_args(" define k=v  define x=y  define z".split())
# Gives
# usage: args.py [-h] [ define D]
# args.py: error: argument  define: Format must be key=value

请注意,这不支持在参数内使用等号,但是您可以在“dumb”k, v = values.split("=", 1)上展开来解决这个问题。在

相关问题 更多 >

    热门问题