Electron框架中调用Python构建桌面应用
为什么想在 Electron 中调用 Python
不同的语言、框架都有自己擅长的领域:Electron 基于 Chromium 和 Node.js 能以 Web 开发的模式打造桌面应用,开发用户界面又快捷又简单;Python 则在数据分析、自动化脚本等领域有非常多的应用。两者的社区生态都十分强大,由两者共同构建应用,在界面开发、功能、性能上能够强强联合;
为了简单验证技术可行性,我们来编写一个 Demo:Demo 说明
目的:验证 Electron 打造的桌面应用能够调用 Python,思路是使用 RPC 或 HTTP 或 WebSocket 进行通信
Demo 功能:输入 x、y 坐标,程序会移动鼠标到屏幕的 x,y 位置(通过 python 库 pyautogui 实现)
Demo 运行环境:MacOS、pyInstaller: 版本 4.5.1、python: 版本 3.9.7
源码:-------- 项目源码 --------
注意:移动鼠标需要授予应用控制权限,在 MacOS 下设置 偏好设置 -> 隐私 -> 辅助功能 -> 允许对应的应用。
技术栈:NodeJS、Electron、Python、aiohttp(HTTP、WebSocket)、pyautogui(控制鼠标)如何实现两者的通信
为了使 NodeJS 和 Python 能够通信,Python 需要启动一个本地通信服务,Demo 中 py/api.py 能够启动一个本地 HTTP 服务:from aiohttp import web import controller app = web.Application() app.add_routes([web.get("/controlMouseAndKeyboard", controller.controlMouseAndKeyboard), web.get("/t", controller.test), web.get("/ws", controller.websocket_handler)]) if __name__ == "__main__": web.run_app(app, port=1134) 复制代码
然后我们需要执行 Python 代码以启动服务,为了使 NodeJS 可以执行 Python,我们使用 pyinstaller 将 Python 打包成可执行文件:# 打包命令 pyinstaller ./py/api.py --clean --distpath ./pydist # 打包后可执行路径 pydist/api/api 复制代码
Python 启动了本地 HTTP 服务后,Chromium 和 Node.js 就可以通过请求的方式,与 python 连接通信了: const res = await axios.default.get("http://localhost:1134/controlMouseAndKeyboard", { params: { x, y, duration: 0.5, action: "move" } }) 复制代码
简单来说三个步骤:NodeJS 执行 Python代码Python 代码启动了一个本地 HTTP 服务通过发起 HTTP 请求与 Python 服务通信从 Demo 到项目实践的思考
本项目只是一个验证思路的 Demo,真的需要在项目上实践,还需要考虑以下几个点:
应该使用 RPC 通信而不是 HTTP 或者 WebSocket,Demo 使用 HTTP 只是搭建方便。实践中在建立连接、保持连接、异常重连都需要编写更多的逻辑来处理。为什么 Demo 没有使用 zerorpc? 这个库已经 4 年没有维护了,不兼容新版 NodeJS。
项目通过 pyinstaller 打包成可执行文件来调用 python。实际上其他能编译为可执行文件的语言也一样。还可以使用 WebAssembly 将其他语言编译成 .wasm,在 NodeJS 中引入执行。
vivo手机通讯录如何搬迁到华为手机我的vivox21手机入手已5年电池已下岗,换个华为妹特10泼肉,传通讯录时候,我发现传统方法不行(蓝牙,wlan),于是上网搜方法,都是下载克隆软件,互传软件,反正就是各种软件。
首发5K买不起,现在800卖不了,索尼RX0到底香不香?运动相机最火的那年,索尼也出了一款索尼RX0,当年4899,本地拍视频的老法师有一台,我体验过几次,虽然很不错,但价格太贵,另一方面,当年自己是以拍照片为主,又不拍视频,实在用不到
买红米K50Pro还是iQOONeo6?仔细对比6点之后,终于明白了iQOONeo6已经发布了,作为发布价最便宜的骁龙8Gen1手机,该机上市之后受到了全网数千万用户的关注。这不,最近就有粉丝私信小编,说这款手机和红米K50Pro相比,到底谁更值得
1395亿!P2P网贷教父被起诉!有哪些警醒?1395亿!!!网贷教父周世平被起诉!给我们普通人有哪些警醒?4月14日,网贷教父周世平被起诉,据告知书,该案件集资参与人累计51。68万名,非法集资1395亿元,造成11。96万
大批iphone价格再次触底,等等党不要乱买,这3款性价比最高最近大概看了一下国内旗舰机的表现,官方价格依旧坚挺。5000元价格段的手机,iQOO9Pro降幅算是比较大的,为300块钱。其他几款基本上不降,或者是100多。但是再看看第三方店铺
又一6000mAh新机备货,12256G低至1399,诚意太足了对于经常出远门,或者说经常出去聚会工作学习的群体来说,其实在买手机的时候,比较建议大家选择大电池类型,因为电池大续航更好,充满电带着出去不担心没电。但需要注意的是,现在手机界的电池
我有两块显示屏,体验能翻倍吗?其实在我眼中,便携式显示器这一细分品类面向的客户更多的是商务一族和游戏玩家居多,如果你最近在想添置一款便携式显示器,不妨可以看看这款雕塑家MF16LC便携式显示器在连接多设备上,有
工业互联网必须回归工业本质工业互联网,必须回归工业本质网上有一个很流行的笑话,大意是,韩国爆发了传染病,有一个被感染的女孩,从医院走丢了。还好,有女孩的照片。于是,全城大搜捕。结果。警察蜀黍竟然抓了400个
DECampamp39SJAVA第1课基础学习JavaSEJava标准版本JavaEEJava企业版JavaMEJava微型版(移动设备和嵌入式设备)JDKJava开发工具包(开发人员必须安装)JREJava运行环境(运行Ja
亚马逊编年史了解首富贝索斯听樊登读书亚马逊编年史去了解一个企业了解一个人!亚马逊的AWS(云服务)作为一个独立业务,在2005年开始起步。贝索斯的前瞻性,以为阿里云挺牛,但是思路原来源自于亚马逊。并且AWS
安装设置Redis安装Redis打开终端,输入命令sudoaptgetinstallredisserver设置Redissudovimetcredisredis。conf打开远程连接将bind修改为