命令行参数作为Python中的变量定义

我正在尝试构建(某种模板/包装器)脚本,该脚本使用一些未定义的选项进行调用

> the_script.py --foo=23 --bar=42 --narf=fjoord

然后创建一个名为变量foo=23bar=42narf='fjoord'在它里面。

怎么做呢?我尝试使用getopt,但是它需要第二个参数,因此我必须定义要获取的选项,当然,我希望能够通过命令行定义变量名。我也尝试OptionParser过,但是不确定如何处理未定义的选项。

那么是手动解析的方式sys.argv,还是在那里存在一个模块,其功能完全相同?


牧羊人nacy
浏览 253回答 2
2回答

翻阅古今

这是使用ast.literal_eval字符串拆分的相对简单的任务-但仅当您具有定义明确的语法时。(例如,仅允许--foo=bar或中的1个--foo bar)。import argparseimport astparser = 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('-'),vd = dict(parse_arg(arg) for arg in unparsed)print(d)我将键值对放入字典中。如果您确实希望将它们作为全局变量,则可以globals().update(d)-但我会对此提出严重建议。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python