当前位置: 首页 > news >正文

打包exe出错了:

打包exe出错了:
Traceback (most recent call last):
File "huu.py", line 6, in
n = int(input('enter:'))
RuntimeError: input(): lost sys.stdin

源码:

python
print('判断一个数是否为素数')
print()while True:print('请输入一个大于1的数:')n = int(input('enter:'))yn = Truefor i in range(2, n):if n % i == 0:yn = Falsebreakif yn == True:print(n, '\r是素数', flush = True)else:print(n, '\r是合数', flush = True)print()

----

您遇到的错误是由于在打包成可执行文件(如exe)时,标准输入流(sys.stdin)在非控制台环境中丢失导致的。以下是解决方案和优化建议:

原因分析

  1. 打包工具特性:PyInstaller等工具在打包GUI应用时默认隐藏控制台,导致input()无法使用。
  2. 输入流丢失:打包后sys.stdin可能被关闭或重定向。

解决方案

方法一:强制显示控制台(推荐)

在打包命令中添加--console参数:

pyinstaller --console your_script.py

方法二:代码适配

修改输入方式,兼容控制台和打包环境:

import sysdef safe_input(prompt):try:return input(prompt)except EOFError:return ""except RuntimeError:print("输入功能在打包环境中不可用")return None# 替换原代码中的input()
n = safe_input('请输入大于1的数:')

优化建议

  1. 输入验证:增加输入有效性检查
while True:try:n = int(safe_input('请输入大于1的数:'))if n <= 1:print("请输入大于1的数")continuebreakexcept ValueError:print("请输入有效数字")
  1. 算法优化:提升素数判断效率(减少循环次数)
def is_prime(n):if n < 2:return Falseif n == 2:return Trueif n % 2 == 0:return False# 只需检查到平方根for i in range(3, int(n**0.5)+1, 2):if n % i == 0:return Falsereturn True

完整修改后的代码

import math
import sysdef safe_input(prompt):try:return input(prompt)except (EOFError, RuntimeError):return Nonedef is_prime(n):if n < 2:return Falseif n == 2:return Trueif n % 2 == 0:return False# 只需检查到平方根for i in range(3, int(math.isqrt(n)) + 1, 2):if n % i == 0:return Falsereturn Truewhile True:user_input = safe_input('请输入大于1的数(输入q退出):')if user_input is None or user_input.lower() == 'q':breaktry:n = int(user_input)if n <= 1:print("请输入大于1的数")continueexcept ValueError:print("请输入有效数字")continueresult = is_prime(n)print(f"{n} 是 {'素数' if result else '合数'}")print()

打包注意事项

  1. 使用以下命令打包:
pyinstaller --clean --console --name PrimeChecker prime_checker.py
  1. 如果仍有问题,尝试添加输入流补丁:
pyinstaller --console --hidden-import=tokenize your_script.py

这些修改确保:

  • 兼容控制台和打包环境
  • 输入更健壮
  • 算法效率提升(时间复杂度从O(n)降到O(√n))
  • 添加退出选项
  • 更好的错误处理

请尝试修改后重新打包,应该能解决sys.stdin丢失的问题。

http://www.fuzeviewer.com/news/434/

相关文章:

  • 【CI130x 离在线】如何运行 curl 脚本
  • 这才是真正的AI NAS!极空间私有云Z2Ultra评测
  • 新东方第三节课名言作文
  • 十月阅读_3
  • 中考_体育
  • 常见问题处理 --- phpstudy启动mysql失败
  • 20232308 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • 【密码学实战】openHiTLS PKCS12命令行程序: PKCS12文件生成与解析
  • 「CTSC2017-游戏」题解
  • vue3 vue3-form-element表单生成工具 输入框增加后缀
  • 20232402 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • 掘金2025年:数字化商业浪潮下,如何选对平台与伙伴?一站式多商户商城系统推荐榜发布,多商户商城代理招募/多商户项目合伙人加盟/一站式开店代理项目加盟
  • 为医疗器械行业搭建“数字桥梁”,破解协同效率与合规难题
  • PostgreSQL 服务版
  • 20232307 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • 2025年10月办公家具公司评价榜:基于真实数据的权威推荐清单
  • vue+antv/x6项目使用问题
  • 《程序员修炼之道:从小工到专家》前五分之一观后感
  • 坐标系与投影关系
  • 用gdb的动态视角看ret2text的实现
  • 1027随笔
  • ask_skill
  • SVN 主分支合并之通过主分支合并子分支执行流程
  • 现代c++编程体验2
  • 化繁为简:解密国标GB28181算法算力平台EasyGBS如何以兼容性与易用性赋能安防集成
  • 计算机毕业设计springboot音乐畅听系统 基于Spring Boot框架的智能音乐播放系统编写 Spring Boot驱动的音乐在线欣赏平台构建
  • vue2 封装组件使用 v-mode【el-radio,el-input】
  • P11993 [JOIST 2025] 迁移计划 题解
  • ERP和CRM、SRM、MES之间的关系,怎么理解?
  • 2025年市面上氟碳铝单板品牌、市场氟碳铝单板公司、国内氟碳铝单板生产厂家、2025年氟碳铝单板品牌、口碑好的氟碳铝单板产品综合评测