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 導(dǎo)入
# 轉(zhuǎn)換js文件
js2py.translate_file('example.js', 'example.py')
# 現(xiàn)在可以導(dǎo)入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ù)對應(yīng)的參數(shù)
result = ctx.call('function_name', *args)3. 使用subprocess調(diào)用node子進(jìn)程
前面兩種只適合執(zhí)行少量js代碼的情況,當(dāng)有大量js代碼要執(zhí)行時,還是建議直接調(diào)用node
import subprocess
# js文件最后必須有輸出,我使用的是 console.log
pro = subprocess.run("node abc.js", stdout=subprocess.PIPE)
# 獲得標(biāo)準(zhǔn)輸出
_token = pro.stdout
# 轉(zhuǎn)一下格式
token = _token.decode().strip()關(guān)于執(zhí)行效率:
py2js有時候在加載一些加密函數(shù)的時候效率低的可憐,大概是因為執(zhí)行機(jī)制的不同:
py2js直接調(diào)用的nodejs引擎不過這個庫用的nodejs解析語法樹轉(zhuǎn)成py代碼,性能挺低的,還不如直接用execjs調(diào)nodejs或自己封裝子進(jìn)程調(diào)用;execjs調(diào)用的pyv8,不過默認(rèn)的pyv8的引擎挺老的,es5好多特征都不支持
以上就是Python執(zhí)行JS代碼的三種方式的詳細(xì)內(nèi)容,更多關(guān)于Python執(zhí)行JS代碼的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python機(jī)器學(xué)習(xí)理論與實戰(zhàn)(一)K近鄰法
這篇文章主要為大家詳細(xì)介紹了python機(jī)器學(xué)習(xí)理論與實戰(zhàn)第一篇,K近鄰法的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01
Python實現(xiàn)監(jiān)控鍵盤鼠標(biāo)操作示例【基于pyHook與pythoncom模塊】
這篇文章主要介紹了Python實現(xiàn)監(jiān)控鍵盤鼠標(biāo)操作,結(jié)合實例形式分析了Python基于pyHook與pythoncom模塊的鍵盤、鼠標(biāo)事件響應(yīng)及日志文件操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2018-09-09
Python?獲取指定開頭指定結(jié)尾所夾中間內(nèi)容(推薦)
獲取文章中指定開頭、指定結(jié)尾中所夾的內(nèi)容。其中,開頭和結(jié)尾均有多種,但最多也就十幾種,所以代碼還是具有可行性的,今天小編給大家介紹通過Python?獲取指定開頭指定結(jié)尾所夾中間內(nèi)容,感興趣的朋友一起看看吧2023-02-02
Python操控mysql批量插入數(shù)據(jù)的實現(xiàn)方法
這篇文章主要介紹了Python操控mysql批量插入數(shù)據(jù)的實現(xiàn)方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10
科學(xué)Python開發(fā)環(huán)境Spyder必知必會點
這篇文章主要為大家介紹了科學(xué)Python開發(fā)環(huán)境Spyder必知必會點及使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01

