版权声明:如需转载请联系本人[email protected] https://blog.csdn.net/u012491646/article/details/82913177
现在有需求对python脚本进行本地化执行,我就自己写了个包,供大家使用,可以互相学习
目标
- 项目的目标是让nodejs可以正常并无缝使用 python脚本
- 同时支持回调函数的传递
- 通过异步方式在本地服务器后端执行python脚本/ipynb格式的文件/以及python字符串
1.机制
充分利用node的异步加载的能力,通过child_pross中的spawn机制(异步的异步),
基于promise封装执行并输出正常或错误的打印记录,实现实时检测python的处理结果
2.可以执行
- python字符串,即符合标准的python脚本,调用 runpytext
- 支持 .py文件 runpath
- 支持 .ipynb (jupyter格式的文件) run_ipynb_code
注意:.ipynb根据官方说明,由于其存储的是一种json格式,也就是说暂时还无法直接执行
程序,故在执行.ipynb程序的时候需要通过官方的jupyter nbconvert 方式对.ipynb进行格
式的转换/目前是存于tmp临时文件中(支持window以及linux系统),再通过正常机制
(runpath)处理python脚本
3.错误处理机制
当python执行处理出错会抛出异常,可以通过回调函数捕捉异常
4.使用方法 安装项目包方法
$ npm install --save jsexecpy
使用方式
-
- 字符串功能
> let jsexecpy = require("jsexecpy") > jsexecpy.runpytext("import os;import time;time.sleep(1);print('you are my love');time.sleep(5);a = 2;a+=1;print(a)")
-
- 执行.py文件
> let jsexecpy = require("jsexecpy") > jsexecpy.runpath("/home/.../test.py",callback)
-
- 执行.ipynb文件
> let jsexecpy = require("jsexecpy") > jsexecpy.run_ipynb_code("/home/.../test.ipynb",callback)
-
- callback 写法
callback返回的是{data,pythonpath} ,即打印日志数据,以及执行脚本的路径
> let callback = function({data,pythonpath},otherargs = 11,...){ dosomething(data,pythonpath,otherargs) } > jsexecpy.runpath("path.py",callback) > jsexecpy.run_ipynb_code("path.ipynb",callback)
- callback 写法