Python調(diào)用JS代碼的方法大全
一.pyexecjs的使用
PyExecJS
是一個 Python 庫,用于在 Python 環(huán)境中執(zhí)行 JavaScript 代碼。它實際上是對 ExecJS 庫的 Python 封裝,ExecJS 本身是一個通用的 JavaScript 運行環(huán)境的抽象層。使用 PyExecJS
,你可以在 Python 中執(zhí)行 JavaScript 代碼,而無需啟動一個完整的 JavaScript 解釋器。它的目標(biāo)是提供一種簡便的方式,使得在 Python 中嵌入 JavaScript 代碼成為可能,特別是對于需要JavaScript 交互的項目而言。
安裝方式:
pip install PyExecJS -i https://pypi.tuna.tsinghua.edu.cn/simple/
基本使用方法
(注:導(dǎo)入不需要py,下載要py)
import execjs # 導(dǎo)入 # 生成JavaScript運行環(huán)境,環(huán)境名可以指定 node = execjs.get() # 安裝nodejs后,會得到運行環(huán)境名為:Node.js (V8) with open('1.js', encoding='utf-8') as f: js_code = f.read() print(js_code) # 編譯js代碼 ctx = node.compile(js_code) # compile方法去加載js代碼 # 兩種方式執(zhí)行js函數(shù) data1 = ctx.eval('get_data({"aa": "123"})') # eval方法中,整個函數(shù)調(diào)用包含在字符串內(nèi) print(data1) data2 = ctx.call('get_data', ['123']) # call方法中,第一個參數(shù)是函數(shù)名(str),后面接參數(shù) print(data2)
js代碼
function get_data(aa){ return aa }
輸出
以上方法只針對非異步的js代碼
二.subprocess調(diào)用異步JS
在 Python 中,subprocess
模塊用于創(chuàng)建和管理子進(jìn)程??梢酝ㄟ^端口調(diào)用JS代碼
本質(zhì)是通過端口調(diào)用js代碼注意路徑,python代碼如下:
import subprocess # 使用 subprocess 模塊執(zhí)行 Node.js 命令 result = subprocess.run(["node", "1.js", "daochu", "7", "5"], capture_output=True, text=True) # 輸出執(zhí)行結(jié)果 print(f"Node.js 執(zhí)行結(jié)果: {result.stdout.strip()}")
JS代碼(注意是輸出console.log,而不是返回return)
function getAsyncData() { return new Promise(function (resolve, reject) { resolve(123) }); } getAsyncData().then( function (data){ console.log(data) } )
輸出結(jié)果
三.express異步接口調(diào)用
簡單來說,Express 是基于 Node.js
平臺,快速、開放、極簡的 Web 開發(fā)框架。
下載:
npm install express -S
基本用法
// 1.導(dǎo)入 express const express = require('express'); // 2.創(chuàng)建 web 服務(wù)器 const app = express(); // 3.get請求 req是請求對象 res響應(yīng)對象 app.get('/user', function(req, res){ // 調(diào)用express提供的res.send()方法,向客戶端響應(yīng)一個JSON對象 res.send('hello world') }) // 4.啟動 web 服務(wù)器 app.listen(8080, function(){ console.log('express server running at http://127.0.0.1:8080/user'); })
響應(yīng)返回的結(jié)果
所以簡單來說如果是異步j(luò)s代碼
// 1.導(dǎo)入 express const express = require('express'); // 2.創(chuàng)建 web 服務(wù)器 const app = express(); function getAsyncData(){ return new Promise(function (resolve, reject) { resolve('hello world'); }); } // 3.get請求 req是請求對象 res響應(yīng)對象 app.get('/user', function(req, res){ // 調(diào)用express提供的res.send()方法,向客戶端響應(yīng)一個JSON對象 getAsyncData().then(function(data){ res.send(data); }); }) // 4.啟動 web 服務(wù)器 app.listen(8080, function(){ console.log(" http://127.0.0.1:8080/user/") console.log('express server running at http://127.0.0.1:8080'); })
然后在本地請求http://127.0.0.1:8080/user/
import requests url = "http://127.0.0.1:8080/user/" response = requests.get(url) print(response.text) print(response)
結(jié)果如下,也是順利調(diào)用了
到此這篇關(guān)于Python調(diào)用JS代碼的方法大全的文章就介紹到這了,更多相關(guān)Python調(diào)用JS代碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python+tkinter使用40行代碼實現(xiàn)計算器功能
這篇文章主要為大家詳細(xì)介紹了Python+tkinter使用40行代碼實現(xiàn)計算器功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01Python使用random.shuffle()打亂列表順序的方法
今天小編就為大家分享一篇Python使用random.shuffle()打亂列表順序的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-11-11