我正在尝试构建(某种模板/包装器)脚本,该脚本使用一些未定义的选项进行调用> the_script.py --foo=23 --bar=42 --narf=fjoord然后创建一个名为变量foo=23,bar=42,narf='fjoord'在它里面。怎么做呢?我尝试使用getopt,但是它需要第二个参数,因此我必须定义要获取的选项,当然,我希望能够通过命令行定义变量名。我也尝试OptionParser过,但是不确定如何处理未定义的选项。那么是手动解析的方式sys.argv,还是在那里存在一个模块,其功能完全相同?
2 回答
翻阅古今
TA贡献1780条经验 获得超5个赞
这是使用ast.literal_eval字符串拆分的相对简单的任务-但仅当您具有定义明确的语法时。(例如,仅允许--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)-但我会对此提出严重建议。
添加回答
举报
0/150
提交
取消