Python調(diào)用JS代碼的方法大全
一.pyexecjs的使用
PyExecJS
是一個(gè) Python 庫,用于在 Python 環(huán)境中執(zhí)行 JavaScript 代碼。它實(shí)際上是對(duì) ExecJS 庫的 Python 封裝,ExecJS 本身是一個(gè)通用的 JavaScript 運(yùn)行環(huán)境的抽象層。使用 PyExecJS
,你可以在 Python 中執(zhí)行 JavaScript 代碼,而無需啟動(dòng)一個(gè)完整的 JavaScript 解釋器。它的目標(biāo)是提供一種簡(jiǎn)便的方式,使得在 Python 中嵌入 JavaScript 代碼成為可能,特別是對(duì)于需要JavaScript 交互的項(xiàng)目而言。
安裝方式:
pip install PyExecJS -i https://pypi.tuna.tsinghua.edu.cn/simple/
基本使用方法
(注:導(dǎo)入不需要py,下載要py)
import execjs # 導(dǎo)入 # 生成JavaScript運(yùn)行環(huán)境,環(huán)境名可以指定 node = execjs.get() # 安裝nodejs后,會(huì)得到運(yùn)行環(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方法中,整個(gè)函數(shù)調(diào)用包含在字符串內(nèi) print(data1) data2 = ctx.call('get_data', ['123']) # call方法中,第一個(gè)參數(shù)是函數(shù)名(str),后面接參數(shù) print(data2)
js代碼
function get_data(aa){ return aa }
輸出
以上方法只針對(duì)非異步的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)用
簡(jiǎn)單來說,Express 是基于 Node.js
平臺(tái),快速、開放、極簡(jiǎn)的 Web 開發(fā)框架。
下載:
npm install express -S
基本用法
// 1.導(dǎo)入 express const express = require('express'); // 2.創(chuàng)建 web 服務(wù)器 const app = express(); // 3.get請(qǐng)求 req是請(qǐng)求對(duì)象 res響應(yīng)對(duì)象 app.get('/user', function(req, res){ // 調(diào)用express提供的res.send()方法,向客戶端響應(yīng)一個(gè)JSON對(duì)象 res.send('hello world') }) // 4.啟動(dòng) web 服務(wù)器 app.listen(8080, function(){ console.log('express server running at http://127.0.0.1:8080/user'); })
響應(yīng)返回的結(jié)果
所以簡(jiǎn)單來說如果是異步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請(qǐng)求 req是請(qǐng)求對(duì)象 res響應(yīng)對(duì)象 app.get('/user', function(req, res){ // 調(diào)用express提供的res.send()方法,向客戶端響應(yīng)一個(gè)JSON對(duì)象 getAsyncData().then(function(data){ res.send(data); }); }) // 4.啟動(dòng) 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'); })
然后在本地請(qǐng)求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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python+tkinter使用40行代碼實(shí)現(xiàn)計(jì)算器功能
這篇文章主要為大家詳細(xì)介紹了Python+tkinter使用40行代碼實(shí)現(xiàn)計(jì)算器功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01天翼開放平臺(tái)免費(fèi)短信驗(yàn)證碼接口使用實(shí)例
天翼開放平臺(tái)提供了一個(gè)免費(fèi)的短信驗(yàn)證碼API,下面看看使用方法吧,我們用python開發(fā)接口2013-12-12Python使用random.shuffle()打亂列表順序的方法
今天小編就為大家分享一篇Python使用random.shuffle()打亂列表順序的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-11-11Python實(shí)現(xiàn)密鑰密碼(加解密)實(shí)例詳解
這篇文章主要介紹了Python實(shí)現(xiàn)密鑰密碼(加解密),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04python函數(shù)超時(shí)自動(dòng)退出的實(shí)操方法
在本篇文章里小編給大家整理的是一篇關(guān)于python函數(shù)超時(shí)自動(dòng)退出的實(shí)操方法,有需要的朋友們可以學(xué)習(xí)下。2020-12-12