这是一个相对简单的任务ast.literal_eval
和字符串拆分——但前提是你有一个非常明确的语法。(例如,仅允许 1 个--foo=bar
或1 个--foo bar
)。
import argparse
import ast
parser = argparse.ArgumentParser() #allow the creation of known arguments ...
namespace,unparsed = parser.parse_known_args()
def parse_arg(arg):
k,v = arg.split('=',1)
try:
v = ast.literal_eval(v) #evaluate the string as if it was a python literal
except ValueError: #if we fail, then we keep it as a string
pass
return k.lstrip('-'),v
d = dict(parse_arg(arg) for arg in unparsed)
print(d)
我已将键值对放入字典中。如果您真的希望它们作为全局变量,您可以这样做globals().update(d)
——但我强烈建议您不要这样做。