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
相关产品推荐
相关产品推荐

