Python脚本转.exe后出现RuntimeError: input(): lost sys.stdin错误求助
解决exe运行时input()报错的问题
核心解决方案
你遇到的RuntimeError: input(): lost sys.stdin错误,是因为打包时选了隐藏控制台窗口的模式,导致程序无法读取控制台输入。解决方法分两种:
方法1:用控制台模式打包
- 用PyInstaller命令行:直接执行
不要加pyinstaller MathPractice.py-w或--windowed参数,打包后生成的exe运行时会弹出控制台,就能正常输入了。 - 用auto-py-to-exe:在界面里找到"Windowed (hide console)"选项,选择"No",重新打包即可。
方法2:改成图形界面(更适合非技术人员使用)
如果想让妻子用起来更方便,不用操作控制台,可以用Python自带的tkinter库做简单的图形界面,替换原来的input()输入逻辑。示例代码如下:
import tkinter as tk from tkinter import messagebox def generate_practice(): try: low = int(entry_low.get()) high = int(entry_high.get()) if low >= high: messagebox.showerror("错误", "最小值必须小于最大值!") return answer_key = var_key.get() # 这里写入你生成练习题的逻辑,比如生成题目、保存文件等 messagebox.showinfo("成功", "练习题已生成!") except ValueError: messagebox.showerror("错误", "请输入有效的数字!") # 创建主窗口 root = tk.Tk() root.title("孩子数学练习题生成器") # 界面元素布局 tk.Label(root, text="数字范围最小值:").grid(row=0, column=0, padx=5, pady=5) entry_low = tk.Entry(root) entry_low.grid(row=0, column=1, padx=5, pady=5) tk.Label(root, text="数字范围最大值:").grid(row=1, column=0, padx=5, pady=5) entry_high = tk.Entry(root) entry_high.grid(row=1, column=1, padx=5, pady=5) var_key = tk.BooleanVar() tk.Checkbutton(root, text="生成答案", variable=var_key).grid(row=2, column=0, columnspan=2, padx=5, pady=5) tk.Button(root, text="生成练习题", command=generate_practice).grid(row=3, column=0, columnspan=2, padx=5, pady=10) root.mainloop()
用这个代码替换原来的输入部分后,再打包时选窗口模式(-w参数),生成的exe就是带图形界面的,妻子直接填写内容、点击按钮就能用,不需要控制台输入。
其他代码优化建议
- 输入验证:原来的代码如果输入非数字会直接崩溃,建议加
try-except捕获ValueError,像上面tkinter示例里那样提示用户输入有效数字。 - 运算合理性检查:比如做减法时,确保被减数大于减数(避免负数结果);做除法时,确保除数不为0,并且结果尽量是整数(适合孩子练习)。
- 增加题量设置:可以新增输入框让用户选择生成多少道练习题,更灵活。
- 保存到文件:把生成的练习题保存成txt文件,方便打印,比如用
with open("练习题.txt", "w") as f: f.write(题目内容)实现。
内容的提问来源于stack exchange,提问作者John B
相关产品推荐
相关产品推荐

