Python呼叫JavaScript程式碼的方法
阿新 • • 發佈:2020-10-28
準備階段:
以一段簡單的JS指令碼為例,將程式碼寫入到檔案中,其中,定義了一個方法,計算兩個數的和。
//norm.js //計算兩個數的和 functionadd(num1,num2){ returnnum1+num2; }
方法一、PyExecJS
PyExecJS 是使用最多的一種方式,底層實現方式是:在本地 JS 環境下執行 JS 程式碼支援的 JS 環境包含:Node.js、PyV8、PhantomJS、Nashorn 等
首先,我們需要安裝依賴包 PyExecJS
//py_exec_js_demo.py //安裝依賴 pip3installPyExecJS 然後,從JS檔案中讀取原始碼 defjs_from_file(file_name): """ 讀取js檔案 :return: """ withopen(file_name,'r',encoding='UTF-8')asfile: result=file.read() returnresult 最後,使用execjs類的compile()方法編譯載入上面的JS字串,返回一個上下文物件 importexecjs fromjs_codeimport* #編譯載入js字串 context1=execjs.compile(js_from_file('./norm.js')) 最後,呼叫上下文物件的call()方法執行JS方法 其中,引數包含:JS程式碼被調的方法名、對應方法的傳入引數 #呼叫js程式碼中的add()方法,引數為2和3 #方法名:add #引數:2和3 result1=context1.call("add",2,3) print(result1)
需要注意的,由於 PyExecJS 執行在本地 JS 環境下,使用之前會啟動 JS 環境,最終導致執行速度會偏慢。
方法二、js2py
js2py作為一個純 Python 實現的 JS 直譯器,可以完全脫離 JS 環境,直接將 JS 程式碼轉換為 Python 程式碼
首先,安裝依賴庫
#安裝依賴庫 pip3installjs2py 然後使用js2py中的EvalJs()方法生成一個上下文物件 #使用獲取上下js2py生成一個上下文環境 context=js2py.EvalJs()
接著利用上下文物件執行 JS 指令碼,轉換為 Python 程式碼
#執行整段JS程式碼 context.execute(js_content) 最後,利用上下文呼叫JS中的方法,並制定輸入引數即可 #使用上下文context呼叫具體的函式 #函式名:add #引數:1,2 result=context.add(1,2) print(result)
方式三、Node.js
實際上是使用 Python 的os.popen執行 node 命令,執行 JS 指令碼
首先,確保本地已經安裝了 Node.js 環境,修改 JS 指令碼,新增一個匯出函式 init ,方便內部函式被呼叫
//計算兩個數的和 functionadd(num1,num2){ returnnum1+num2; } //新增一個匯出函式(node方式) module.exports.init=function(arg1,arg2){ //呼叫函式,並返回 console.log(add(arg1,arg2)); };
然後,將呼叫 JS 方法的命令組成一個字串
#組成呼叫js的命令 #node命令:node-e cmd='node-e"require(\\"%s\\").init(%s,%s)"'%('./norm',3,5) 最後,通過os.popen執行命令即可 pipeline=os.popen(cmd) #讀取結果 result=pipeline.read() print('結果是:',result)
以上就是Python呼叫JavaScript程式碼的方法的詳細內容,更多關於Python呼叫JavaScript程式碼的資料請關注我們其它相關文章!