如何让Python代码(含exe)运行于旧Windows控制台宿主而非Win11终端?
让Python生成的EXE运行在旧版Windows控制台宿主(conhost.exe)
以下是几种可行的解决方案,按操作复杂度从易到难排序:
1. 修改EXE文件的兼容性设置
这是针对单个程序的最简配置方式:
- 找到打包好的EXE文件,右键选择「属性」
- 切换到「兼容性」选项卡,勾选「用旧版控制台运行」(部分Windows 11版本需点击「更改所有用户的设置」后找到该选项)
- 点击「确定」保存,之后双击该EXE会自动用conhost.exe启动
2. 通过批处理调用conhost启动EXE
若需要脚本批量启动或不想修改EXE属性,可直接让conhost托管程序:
- 编写批处理文件(.bat),内容如下:
conhost.exe "C:\完整路径\你的程序.exe" - 运行该批处理,程序会直接在旧版控制台打开,不会调用Windows Terminal
3. 全局切换默认终端为conhost.exe
如果希望所有控制台程序都默认使用旧版宿主,可修改系统设置:
- 打开Windows Terminal,点击顶部菜单「设置」
- 切换到「启动」选项卡,在「默认终端应用」中选择「Windows控制台主机(conhost.exe)」
- 保存设置后,所有控制台程序都会默认用conhost打开,包括你的Python EXE
4. 代码层面强制关联conhost(打包前配置)
若需要在代码中直接控制,可通过ctypes调用Windows API确保程序在conhost环境运行:
import ctypes import sys def force_conhost(): kernel32 = ctypes.WinDLL('kernel32', use_last_error=True) # 通过设置控制台标题触发conhost关联(核心逻辑是让系统使用旧版宿主) kernel32.SetConsoleTitleW("Old Console Session") if __name__ == "__main__": force_conhost() # 你的业务代码 print("运行在旧版控制台中")
打包时使用常规PyInstaller命令即可,例如:pyinstaller --onefile your_script.py
内容的提问来源于stack exchange,提问作者Sv3ks
相关产品推荐
相关产品推荐

