更改 Python Argparse 分隔符

Change Python Argparse delimiter

我正在使用 Python 脚本作为中间应用程序。我无权访问代码的主应用程序正在以这种格式将参数传递给 Python 脚本: "-number+1"(如果参数是 "-number 1",argparse 会正常工作)。

知道如何使 Argparse 从该参数中获取该值 (1) 类似于没有 "+" 但 space 时可以完成的操作吗?

这可能太天真了,但您可以简单地拆分 + 上的每个传入参数,以生成比原始 sys.argv:[=21= 更适合 parse_args 的列表]

# Turn ["-number+1"] into ["-number", "1"]
processed_args = []
for arg in sys.argv[1:]:
    if arg.startswith(tuple(p.prefix_chars)):
        process_args.extend(arg.split("+", 1))
    else:
        process_args.append(arg)
args = p.parse_args(processed_args)

转念一想,不要分裂任何东西。只需将第一个 + 替换为 =:

args = p.parse_args([word.replace("+", "=", 1) if word.startswith(tuple(p.prefix_chars)) else word for word in sys.argv[1:]])

argparse 已经知道单个单词 -number=1-number1.

这两个单词相同

的基础上,您可以检查 word 是否从一个已注册的动作开始,并在第一个 + 处拆分以使其不那么幼稚。

假设您有一组这样的操作:

actions = {'-hello', '-number'}

或者,您可以定义 actions 。这是一个内部属性,因此将来可能会更改。

actions = {o for a in parser._actions for o in a.option_strings}
# Turn ["-number+1"] into ["-number", "1"]
args = p.parse_args([word for arg in sys.argv[1:] for word in arg.split('+', 1) if arg.split('+', 1)[0] in actions])