nodejs(javascript)執行python腳本

現在有需求對python腳本進行本地化執行,我就自己寫了個包,供大家使用,可以互相學習

jsexecpy 的github地址

目標

  • 項目的目標是讓nodejs可以正常並無縫使用 python腳本
  • 同時支持回調函數的傳遞
  • 通過異步方式在本地服務器後端執行python腳本/ipynb格式的文件/以及python字符串

1.機制

充分利用node的異步加載的能力,通過child_pross中的spawn機制(異步的異步),
基於promise封裝執行並輸出正常或錯誤的打印記錄,實現實時檢測python的處理結果

2.可以執行

  1. python字符串,即符合標準的python腳本,調用 runpytext
  2. 支持 .py文件 runpath
  3. 支持 .ipynb (jupyter格式的文件) run_ipynb_code
注意:.ipynb根據官方說明,由於其存儲的是一種json格式,也就是說暫時還無法直接執行
程序,故在執行.ipynb程序的時候需要通過官方的jupyter nbconvert 方式對.ipynb進行格
式的轉換/目前是存於tmp臨時文件中(支持window以及linux系統),再通過正常機制
(runpath)處理python腳本

3.錯誤處理機制

當python執行處理出錯會拋出異常,可以通過回調函數捕捉異常

4.使用方法 安裝項目包方法

    $ npm install --save jsexecpy 

使用方式

    1. 字符串功能
    > 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)")
    
    1. 執行.py文件
    > let jsexecpy = require("jsexecpy")
    > jsexecpy.runpath("/home/.../test.py",callback)
    
    1. 執行.ipynb文件
    > let jsexecpy = require("jsexecpy")
    > jsexecpy.run_ipynb_code("/home/.../test.ipynb",callback)
    
    
    1. 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)
    
    1. python文件傳參更新
      python some.py a b c -p=a --list=bb
      傳參有兩種方式
    • a) string type
     > let params = "a b c -p=a --list=bb"
     > jsexecpy.runpath_with_params("some.py",params,callback)
    
    • b) array type
     > let paramslist = ["a","b" ,"c", "-p=a", "--list=bb"]
     > jsexecpy.runpath_with_params("some.py",paramslist,callback)
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章