不承担所有参数的Python参数解析器是字符串

时间:2016-03-20 11:49:52

标签: python command-line-parsing

是否有一个Python模块可以解析一系列看似命令行的选项和参数,其中选项值不是字符串?也就是说,我可能有这样的序列:

("--foo", foo, "--bar", bar1, bar2, baz)

此处"--foo""--bar"是字符串,其他是任意对象。我希望能够定义例如"--foo"接受一个参数,"--bar"接受两个参数,让解析器只读取这些选项后面的内容而不尝试解析它们。

我以为我会使用标准argparsenargs或自定义argparse.Action,但即使有了这些内容,它也希望每个参数都是一个字符串并引发一个异常,如果它无法读取它的开头。

更新:令人敬畏的是,旧的optparse可以做到这一点。

1 个答案:

答案 0 :(得分:0)

令人惊讶的是,旧的optparse开箱即用。那就是:

>>> class UniqueSnowflake(object): pass
...
>>> parser = optparse.Parser()
>>> parser.add_option("--foo", type="string") # means 'as is'
>>> parser.parse(["--foo", UniqueSnowflake()])
(<Values at 0x... {'foo': <...UniqueSnowflake object at 0x...>}>, [])