如何等待PyScript环境完全初始化并监听控制台消息执行JS函数?
解决方案
一、监听控制台特定消息并触发函数
浏览器中无法直接读取stdout,但可以通过重写console.log方法拦截输出内容,判断是否匹配目标消息后执行指定函数。
实现代码
// 保存原生console.log方法,避免覆盖后丢失原有功能 const originalConsoleLog = console.log; // 重写console.log console.log = function(...args) { // 先调用原生方法,保证控制台正常输出内容 originalConsoleLog.apply(console, args); // 将输出参数转为字符串,检查是否包含目标消息 const outputContent = args.join(' '); if (outputContent.includes('ABCD:READY')) { // 触发目标函数 finallyStart(); // 可选:恢复原生console.log,避免重复触发 console.log = originalConsoleLog; } }; // 你的目标函数 function finallyStart() { console.log('finallyStart 已执行'); // 这里编写业务逻辑 }
注意事项
这段代码需要在目标导入脚本之前加载执行,才能确保拦截到它的控制台输出。如果目标脚本是异步加载的,也要保证这段拦截代码先于脚本执行。
二、等待PyScript完全初始化
PyScript提供了官方的事件和API来监听运行环境的初始化状态,以下是两种可靠的实现方式:
方式1:监听全局py-ready事件
当PyScript的整个运行环境(包括Python解释器、依赖包等)完全初始化完成后,会在document上触发py-ready事件:
document.addEventListener('py-ready', () => { console.log('PyScript 运行环境已完全就绪'); // 这里编写依赖PyScript的业务逻辑 });
方式2:使用whenReady API(PyScript 2.x+)
如果使用的是PyScript 2.x及以上版本,可以直接导入并使用whenReady异步方法:
import { whenReady } from 'pyscript'; async function initAfterPyScript() { await whenReady(); console.log('PyScript 环境初始化完成'); // 执行后续逻辑 } initAfterPyScript();
内容的提问来源于stack exchange,提问作者FlippingTook
相关产品推荐
相关产品推荐

