是否有一个Python模块可以解析一系列看似命令行的选项和参数,其中选项值不是字符串?也就是说,我可能有这样的序列:
("--foo", foo, "--bar", bar1, bar2, baz)
此处"--foo"
和"--bar"
是字符串,其他是任意对象。我希望能够定义例如"--foo"
接受一个参数,"--bar"
接受两个参数,让解析器只读取这些选项后面的内容而不尝试解析它们。
我以为我会使用标准argparse
和nargs
或自定义argparse.Action
,但即使有了这些内容,它也希望每个参数都是一个字符串并引发一个异常,如果它无法读取它的开头。
更新:令人敬畏的是,旧的optparse
可以做到这一点。
答案 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...>}>, [])