You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pyinstaller打包.exe运行报错:input()丢失sys.stdin问题求助

问题解决:input()触发RuntimeError: lost sys.stdin

报错原因

你打包时使用的-w(即--windowed)参数,会让PyInstaller生成无控制台窗口的程序,但你的代码依赖input()读取用户输入——无控制台程序会禁用标准输入流(sys.stdin),因此调用input()时直接抛出异常。

解决方案

方案1:移除-w参数,保留控制台

重新执行打包命令:

pyinstaller --onefile main.py

生成的exe运行时会弹出控制台窗口,你可在控制台内输入x、y的数值,之后matplotlib的绘图窗口会正常显示。

方案2:保留无控制台,替换input为GUI输入框

如果不想显示控制台,用Python自带的tkinter库做输入对话框替代input(),修改后的代码如下:

from matplotlib import pyplot as plt
import tkinter as tk
from tkinter import simpledialog

# 隐藏tk主窗口
root = tk.Tk()
root.withdraw()

# 通过对话框获取输入
x1 = int(simpledialog.askstring("输入", "Insira primeiro valor de x:"))
x2 = int(simpledialog.askstring("输入", "Insira segundo valor de x:"))
x3 = int(simpledialog.askstring("输入", "Insira terceiro valor de x:"))
x4 = int(simpledialog.askstring("输入", "Insira quarto valor de x:"))

y1 = int(simpledialog.askstring("输入", "Insira primeiro valor de y:"))
y2 = int(simpledialog.askstring("输入", "Insira segundo valor de y:"))
y3 = int(simpledialog.askstring("输入", "Insira terceiro valor de y:"))
y4 = int(simpledialog.askstring("输入", "Insira quarto valor de y:"))

aceleracao_x = [x1, x2, x3, x4]
forca_y = [y1, y2, y3, y4]

plt.plot(aceleracao_x, forca_y, color='b')
plt.scatter(aceleracao_x, forca_y, c='black')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Vinicius Andrade Trento')

plt.show()

再用原命令打包即可:

pyinstaller --onefile -w main.py

运行exe时会逐个弹出输入对话框,无需控制台支持。

内容的提问来源于stack exchange,提问作者Vinizilin XD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 18:45:43