1. 程式人生 > 程式設計 >Python呼叫JavaScript程式碼的方法

Python呼叫JavaScript程式碼的方法

準備階段:

以一段簡單的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程式碼的資料請關注我們其它相關文章!