python 动态加载代码_Python脚本中动态加载模块(module)

title: Python脚本中动态加载模块(module) top: false cover: false toc: true mathjax: true date: 2019-08-29 12:07:01 password: summary: 在Python脚本中根据传入的参数动态加载指定的模块(module)。 tags: - Python categories: - Python

参考资料

内容简介

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

使用场景:

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

代码范本

先看脚本目录结构。

Python的模块与目录关系

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

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")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值