Python Eel使用block=False时出现404错误求助
解决Eel中
block=False启动时的404错误 问题根源
当使用eel.start("index_blank.html", block=False)时,Eel会启动Web服务但不会阻塞Python主线程。如果脚本没有后续逻辑维持主线程运行,Python解释器会直接退出,导致Web服务被关闭,浏览器访问时就会出现404错误。而默认的eel.start()会阻塞主线程,持续维持服务运行,因此能正常访问页面。
修复方案
核心是让主线程保持运行,同时不干扰Eel的事件循环,推荐用Eel自带的eel.sleep()实现:
import eel # 暴露给HTML的回调函数 @eel.expose def send_data_to_html(content): # 可添加逻辑处理,返回结果给HTML return f"Python received: {content}" # 初始化Eel,指定HTML所在目录(同目录用".",子目录如web则填"web") eel.init(".") # 启动服务且不阻塞主线程 eel.start("index_blank.html", block=False) # 维持主线程运行,避免脚本提前退出 while True: eel.sleep(1)
实现向HTML回传内容
要让Python主动推送内容到HTML,需在HTML中定义并暴露对应的JS函数:
index_blank.html
<!DOCTYPE html> <html> <head> <script src="/eel.js"></script> </head> <body> <div id="content"></div> <script> // 暴露JS函数给Python调用 eel.expose(receive_data); function receive_data(data) { // 将Python传来的内容渲染到页面 document.getElementById("content").innerText += data + "\n"; } // 示例:调用Python的回调函数 eel.send_data_to_html("Hello from HTML!")(function(response) { console.log(response); }); </script> </body> </html>
之后在Python中,可随时调用eel.receive_data("Hello from Python!"),将内容推送到HTML页面。
额外注意事项
- 确保
eel.init()的路径正确,必须指向包含HTML文件的目录,否则Eel找不到页面也会触发404。 - 若需执行其他后台逻辑,可放在
eel.start()后的循环中,或用线程处理,注意线程安全。
内容的提问来源于stack exchange,提问作者robmeg
相关产品推荐
相关产品推荐

