Gooey使用python打包后,print不能输出到GUI的命令行窗口内的问题解决

2023-11-05

  为了给自己的图片接口站api.horosama.com补充图片,写了个壁纸爬虫程序,同时用Gooey做了个简单的GUI,然而,程序在vscode里直接运行的时候,是可以print函数输出到GUI的命令行窗口的,用pyinstaller打包之后就不行了。
  搜了一下github上Gooey的issue发现有大佬给出了解决方法,在代码前加入如下几行

import codecs
import sys

if sys.stdout.encoding != 'UTF-8':
    sys.stdout = codecs.getwriter('utf-8')(sys.stdout.buffer, 'strict')
if sys.stderr.encoding != 'UTF-8':
    sys.stderr = codecs.getwriter('utf-8')(sys.stderr.buffer, 'strict')
    

  然后记得print函数加入参数flush=True,再打包一次就可以啦~
  这行代码之所以能起作用,我推测应该还是和python的print编码以及windows的控制台编码的问题,可以参考下这篇博文python,window控制台下编码问题

  引用下这篇文章的开头部分如下:

  Python 的 print 语句有一个很奇怪的 bug。它的功能是向控制台输出字符,这本身不是问题。但是 Python 内部是支持 Unicode 字符串的,而 Unicode 字符串在用 print 输出时 print 要进行一次从 Unicode 到 ANSI/MBCS 编码的编码,编码后才会以 8-bit 流输出结果。
  编码就编码吧,这也是很正常的。对于控制台程序来说,输出可能被重定向到文本文件。如果不指定编码,重定向时就不知道以何种 8-bit 字节流写入文本文件,所以,输出到控制台的东西理论上也应该是经过编码的 8-bit 流。综上所述,确实有必要进行一次 WCHAR 到 char 的转码。
  但是问题在于,Python 的 print 语句在转码时,居然用的是 strict 规则。即,待输出字符串若含有当前代码页之外的字符,就会在转码过程中出现不可转码的文字,从而抛出 exception。print 语句又不处理这个 exception,导致一个平平常常 print 语句竟然会引起 Python 程序的异常!这简直是不可思议。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Gooey使用python打包后,print不能输出到GUI的命令行窗口内的问题解决 的相关文章

随机推荐

  • java与数据库连接odbc_详解java数据库连接之JDBC-ODBC桥连方式

    java数据库连接方式有两种 其中JDBC ODBC桥连方式属于之一 JDBC ODBC桥连方式连接数据库适用于JDK1 8之前的JDK版本 具体的连接过程详见下文 详析JDBC ODBC桥连方式 JDK提供JDBC接口 JDBC是一种可以
  • CMake基本语法

    操作数 类型 分类 BOOL STRING PATH FILEPATH 配置变量类型 LIST 转换 推导 具名 声明周期 set 声明 具名 unset取消 定义一个变量 判断是否定义用DEFINED set lt 变量名 gt lt 变
  • 【python自动化办公】Python自动化之Excel——openpyxl 模块(入门)

    前言 1 学习python自动化办公目的 学会使用python自动化处理文件 减少重复劳动 科学管理文件 能够不再使用别的软件合并 分割PDF等 2 未来持续打卡内容 Task03 Python与word和PDF Task04 简单的Pyt
  • golang gin框架 Context自定义拓展

    golang gin框架 Context自定义拓展 有些时候会遇到gin Context自带属性或方法无法满足开发需求的情况 可以对gin Context进行一定的拓展和自定义 大致拓展效果如下 可以新增属性和方法 func main se
  • IDEA编译报错:java.lang.OutOfMemoryError: Java heap space和java.lang.StackOverflowError

    名词解释 java lang OutOfMemoryError 内存不足错误 java lang StackOverflowError 栈溢出错误 用Intellij IDEA开发应用时 如果编译的代码量很大 会碰到 java lang O
  • 决策树(统计学习方法(李航))的贷款的例子的实现

    以统计学习方法 李航 这本书的例子为基础 需要注意的地方 我用的是pycharm python版本是3 7 graphviz是一个软件 在pycharm里面下了还得去官网下 下完之后得加入环境变量可能还需要重启电脑 缺啥库就安啥库 那个数据
  • Mybatis的缓存机制及其使用

    一 什么是缓存 Cache 缓存有什么作用 1 存在内存中的临时数据 2 将用户经常查询的数据放在缓存 内存 中 用户查询数据时就不需要在从磁盘上 关系型数据库数据文件 查询 直接从缓存中查询 从而提高了查询效率 解决了高并发系统的性能问题
  • docker安装elasticsearch(一条龙服务)

    目录 安装elasticsearch 0 资料 1 部署单点es 1 1 创建网络 1 2 加载镜像 1 3 运行 2 部署kibana 2 1 部署 2 2 DevTools 3 安装IK分词器 3 1 在线安装ik插件 较慢 3 2 离
  • LeetCode-3. 无重复字符的最长子串

    题目 给定一个字符串 请你找出其中不含有重复字符的 最长子串 的长度 示例 1 输入 abcabcbb 输出 3 解释 因为无重复字符的最长子串是 abc 所以其长度为 3 示例 2 输入 bbbbb 输出 1 解释 因为无重复字符的最长子
  • 12个爆款 Java 开源项目

    1 JavaGuide https github com Snailclimb JavaGuide Star 10503 Java学习 面试指南 一份涵盖大部分Java程序员所需要掌握的核心知识 2 symphony https githu
  • 进度管理计划7个过程及相关重点

    概述 1 规划进度管理 规划 编制 管理 执行和控制项目进度而制定政策 程序和文档过程 2 定义活动 识别和记录为完成项目可交付成果而采取的具体行动的过程 3 排列活动顺序 识别和记录项目活动之间的关系的过程 4 估算活动资源 估算执行各项
  • RKNN-ToolKit2 1.5.0安装教程

    引言 由于种种原因需要用到开发版RK3568 需要预先安装RKNN Toolkit2进行模型转化等 博主安装的版本是1 5 0 Ubuntu版本是20 04 python版本3 6 一 虚拟环境创建 1 为了隔离环境 我们采用conda创建
  • C++网络编程

    文章目录 网络通信socket 网络通信的过程 C 网络编程常用API 客户端网络通信过程与常用API 1 创建套接字 int socket int family int type int protocol 2 客户端请求连接函数 int
  • 软考考点之数据库关系运算符含义的理解

    如 2018上半年 第70题 给定关系 R A B C D E 与S B C F G 那么与表达式 2 4 6 7 2 lt 7 R S 等价的SQL语句 如下 SELECT 69 FROM R S WHERE 70 69 A R B D
  • springboot启动三部曲(Eclipse)

    开始前准备事项 JDK Eclipse Maven安装 一 创建maven项目 创建完成后项目目录如下 x
  • 解决uni.getLocation用户端首次拒绝后,点第二次不会再调用的问题

    解决方案 给与用户手动指引开启手机定位 效果 测试机为iphone11 机型不一样可能效果会有差别
  • pandas 实现 Excel 常见操作 (2)

    接下来介绍 pandas 的基本操作中 大体相当于 Excel 的合计 小计 subtotal 和数据透视表的方法 pandas 的数据统计功能比 Excel 强大很多 方式也更加灵活 Excel 问题之一就是数据的存储和显示不分离 而 p
  • 今夜科技谈

    我们希望 AI 能越来越聪明 但又害怕它们过于聪明 AlphaCode 超半数程序员的自主编程 AI 2 月 2 日 DeepMind 在官方博客中 介绍了他们最新的研发成果 AlphaCode AlphaCode 是一个可以自主编程的系统
  • Spring入门:IOC和DI (基于XML)

    目录 Spring的IOC ApplicationContext的三个常用实现类 ApplicationContext与BeanFactory的区别 Spring管理Bean的细节 1 创建Bean的三种方式 方式1 默认构造函数创建 方式
  • Gooey使用python打包后,print不能输出到GUI的命令行窗口内的问题解决

    为了给自己的图片接口站api horosama com补充图片 写了个壁纸爬虫程序 同时用Gooey做了个简单的GUI 然而 程序在vscode里直接运行的时候 是可以print函数输出到GUI的命令行窗口的 用pyinstaller打包之