Python執(zhí)行JS代碼的三種方式
1. 使用 js2py
基本操作:
import js2py # 執(zhí)行單行js語句 js2py.eval_js("console.log(abcd)") >>> abcd # 執(zhí)行js函數(shù) add = js2py.eval_js("function add(a, b) {return a + b};") print(add(1,2)) >>> 3 # 另一種方式 js = js2py.EvalJs({}) js.execute("js語句")
騷操作一: 在js代碼中引入python對象 或 python代碼
# 在js代碼中引入python對象 context = js2py.EvalJs({'python_sum': sum}) context.eval('python_sum(new Array(1,4,2,7))') >>> 14 # 在js代碼中加入python代碼 js_code = ''' var a = 10 function f(x) {return x*x} ''' context.execute(js_code) context.f("14") 或 context.f(14) >>> 196
騷操作二: 將js代碼轉(zhuǎn)為python模塊,再使用import 導入
# 轉(zhuǎn)換js文件 js2py.translate_file('example.js', 'example.py') # 現(xiàn)在可以導入example.py from example import example example.someFunction()
詳見:https://github.com/PiotrDabkowski/Js2Py
2. 使用 execjs
import execjs js_code = open('file.js',encoding='utf-8').read() ctx = execjs.compile(js_code) # 第一個參數(shù)為ja代碼中的函數(shù)名, 后面為函數(shù)對應的參數(shù) result = ctx.call('function_name', *args)
3. 使用subprocess調(diào)用node子進程
前面兩種只適合執(zhí)行少量js代碼的情況,當有大量js代碼要執(zhí)行時,還是建議直接調(diào)用node
import subprocess # js文件最后必須有輸出,我使用的是 console.log pro = subprocess.run("node abc.js", stdout=subprocess.PIPE) # 獲得標準輸出 _token = pro.stdout # 轉(zhuǎn)一下格式 token = _token.decode().strip()
關于執(zhí)行效率:
py2js有時候在加載一些加密函數(shù)的時候效率低的可憐,大概是因為執(zhí)行機制的不同:
py2js直接調(diào)用的nodejs引擎不過這個庫用的nodejs解析語法樹轉(zhuǎn)成py代碼,性能挺低的,還不如直接用execjs調(diào)nodejs或自己封裝子進程調(diào)用;execjs調(diào)用的pyv8,不過默認的pyv8的引擎挺老的,es5好多特征都不支持
以上就是Python執(zhí)行JS代碼的三種方式的詳細內(nèi)容,更多關于Python執(zhí)行JS代碼的資料請關注腳本之家其它相關文章!
相關文章
Python中MySQLdb和torndb模塊對MySQL的斷連問題處理
這篇文章主要介紹了Python中MySQLdb和torndb模塊對MySQL的斷連問題處理,torndb使用起來相對更加簡潔一些,需要的朋友可以參考下2015-11-11pytorch 實現(xiàn)在測試的時候啟用dropout
這篇文章主要介紹了pytorch 實現(xiàn)在測試的時候啟用dropout的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-05-05詳解Python中的數(shù)據(jù)清洗工具flashtext
FlashText是GitHub上的一個開源Python庫,正如之前所提到的,它在提取關鍵字和替換關鍵字任務上有著極高的性能。本文將詳解一下flashtext的使用,需要的可以參考一下2022-06-06Django 創(chuàng)建新App及其常用命令的實現(xiàn)方法
這篇文章主要介紹了Django 創(chuàng)建新App及其常用命令的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-08-08