Python+Selenium项目打包为exe后控制台print内容不输出如何解决
原因分析
- 使用PyInstaller等工具打包时若添加了
--windowed/-w参数,会默认关闭控制台窗口,print语句没有输出载体,自然无法显示内容 - 即便保留了控制台,Python默认的输出缓冲机制会将print内容暂存到缓冲区,程序运行过程中不会主动刷新到控制台,看起来就像没有输出
解决方案
方案1:启用控制台窗口(最常用)
如果程序本身需要控制台展示运行日志,打包时移除--windowed/-w参数即可,以PyInstaller为例,打包命令为:pyinstaller -F 你的脚本文件名.py
参数说明:-F表示将所有依赖打包为单个可执行文件,不加窗口禁用参数就会默认弹出控制台,所有print内容可正常输出。
方案2:手动刷新输出缓冲
如果因业务要求必须保留--windowed参数隐藏控制台,可通过两种方式调整输出逻辑:
- 单句print添加刷新参数,将所有
print(xxx)修改为print(xxx, flush=True),强制每执行一次print就把内容刷新到输出流 - 全局重定向输出到日志文件,在代码开头添加如下逻辑,所有print内容会直接写入本地日志文件,方便随时查看:
import sys # 所有print内容会写入同目录下的 运行日志.log 文件 log = open("运行日志.log", "w", encoding="utf-8") sys.stdout = log sys.stderr = log
现有代码优化提示
你提交的代码中FireFox启动参数配置顺序有误,创建的Options实例不会生效,需调整顺序如下:
options = Options() options.headless = False # 如需无界面运行可改为True config_path = os.path.join(application_path[0]+'/', config_name) print(config_path, flush=True) # 初始化浏览器时传入options参数 browser = webdriver.Firefox(executable_path=config_path, options=options)
内容的提问来源于stack exchange,提问作者Jcsmz
相关产品推荐
相关产品推荐

