Python脚本中动态加载模块(module)


参考资料

wawastein/zabbix-cloudwatch

内容简介

在Github上看到一个在Zabbix Userparameter中调用AWS的API的Python脚本,里面用到了importlib这个模块,觉得挺实用的,做下笔记。

使用场景:

在编写Python脚本的时候,我们可能会想设计成一个入口(gateway)脚本文件接收一个服务(service)参数,然后
在gateway脚本中根据service参数去动态加载一个Python模块文件(module),从而达到“解耦”的目的。

代码范本

先看脚本目录结构。

file dir structure

aws_discovery.py为主脚本,./aws_discovery.py --service 'rds'将会动态加载./discovery/rds.py模块。

#!/usr/bin/env python
# coding=utf-8
import argparse
import importlib

# argparse模块用来处理传给脚本的参数。

parser = argparse.ArgumentParser(
    description="Description of this script."
)
# "--service" 为此脚本的标志(flag);dest会成为一个属性名记录在parser对象中。
# 假设此脚本为"gateway.py",那么运行脚本时使用以下方式传参:
# python gateway.py --service <service_name>
parser.add_argument("--service", dest="service",
                        help="Service to discover instances in",
                        required=True, type=str)
# 从parser获取参数集合,args对象实际为Namespace类实例,而Namespace就是一个简单的对象,
# 里面就是一堆在add_argument方法中定义的属性。
args = parser.parse_args()
# import_module方法第一个参数为将导入的模块的文件名,第二个参数为模块文件的目录名。
discovery_module = importlib.import_module(".{}".format(args.service), "discovery")

文章作者: 少年G
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 少年G !
评论
 上一篇
[译]Kubernetes集群灾备(disaster recovery)的终极指南 [译]Kubernetes集群灾备(disaster recovery)的终极指南
使用Kubernetes时为什么要备份?需要备份什么?如何备份?
2019-08-31
下一篇 
通过克隆创建k8s节点基础环境 通过克隆创建k8s节点基础环境
通过克隆创建k8s节点基础环境克隆虚拟机步骤 安装完虚拟机后,安装yum的epel源,执行yum update。 然后创建虚拟机快照,名为initial centos7 通过vmware从快照克隆 克隆后在开机前选择新虚拟机 –>
2019-08-23
  目录