为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

牧羊人nacy 2021-03-30 04:11:15
我正在尝试构建(某种模板/包装器)脚本,该脚本使用一些未定义的选项进行调用> 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)-但我会对此提出严重建议。


查看完整回答
反对 回复 2021-04-01
  • 2 回答
  • 0 关注
  • 252 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信