python动态运行py代码_动态执行python脚本

前言

存在许多独立的python脚本,这些脚本可能会增加,也可能会减少,现在需要按照某种顺序调度这些程序。在python的standard library中,有一个模块imp可以实现动态的调用pthon脚本,实现调用,imp需要知道脚本的module name,module path。

思路

(一) 所有的python脚本都要提供一个入口函数:

def main(args):#args为string,由脚本编写者自行解析

return exit_code #-1失败,其他成功

args是脚本运行需要的参数,参数为字符串,格式有脚本编写者自行设定,自行解析。

(二) 建立2个表:script_list、script_log。

1. script_list用来记录需要执行的脚本的信息。主要字段有:module_name,module_path,module_args。其中module_name,module_path是为模块imp准备的,module_args是为函数main准备的。

2. script_log用来记录脚本执行情况的日志。

(三)执行

1. 根据module_name,module_path调用脚本。

2. 然后执行脚本的main函数,并把module_args传给main函数

3. 将执行的结果记录日志(这一步可以根据实际情况编写)

实现

表的实现可以由多种方式。可以通过数据库,也可以仅仅是一个配置文件,这个可以根据实际情况编写。所以主要关注如何实现python脚本的调度。

代码如下:

importsys,imp,os,tracebackdefload(module_name,module_path):'''使用imp的两个函数find_module,load_module来实现动态调用Python脚本。

如果发现异常,需要解除对文件的占用'''fp, pathname, description=imp.find_module(module_name,[module_path])try:returnimp.load_module(module_name,fp,pathname,description)finally:iffp:

fp.close()defdo(module_name,module_path,module_args):'''在这个过程中用到3个模块,其做用分别是:

sys:添加library的path,因为有的脚本会调用其他的脚本,如果没有将脚本的路径添加到path,会调用失败。

os:设置当前的工作目录为脚本的目录

traceback:如果脚本异常,获取异常信息'''

#设置环境

sys.path.append(module_path)

default_cwd=os.getcwd()

os.chdir(module_path)#调用与执行

try:

do=load(module_name,module_path)

exit_code=do.main(module_args)if exit_code==-1:print('execute error')#可以修改

except:

vtype,value,trace=sys.exc_info()

error_string=traceback.format_exception(vtype,value,trace)print(error_string)#可以修改,用于记录异常信息

#还原环境

sys.path.pop()

os.chdir(default_cwd)

代码要点:

注意设置脚本的当前工作目录

总结

这仅仅是一个很简单执行其他脚本的功能,如果要实现一个脚本的调度系统会比较复杂,因为需要考虑脚本与脚本之间有依赖关系,脚本的执行有触发条件等,这就需要根据实际情况来定了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值