使用 PyInstaller 打包 Python 程序时 隐藏调用其它程序的命令窗口。
2025-08-03 17:39:13 275 分享链接 开发笔记 python pyinstaller
在使用 --windowed(-w)参数打包 Python 程序时,虽然可以隐藏自身的控制台窗口,但调用外部可执行文件(如 edge-tts.exe)时仍会弹出其自带的 CMD 窗口,这是因为:
edge-tts.exe 本身是一个控制台程序(非窗口程序),当它被调用时,Windows 系统会默认为其分配一个控制台窗口用于输出信息,这个行为不受 Python 程序的 --windowed 参数控制。
解决方法:在调用 edge-tts.exe 时隐藏其控制台窗口
需要在 Python 代码中调用 edge-tts.exe 时,通过 subprocess 模块的参数强制隐藏其窗口。具体步骤如下:
1. 修改调用 edge-tts.exe 的代码
假设你原本的调用代码是:
import subprocess
# 错误示例:直接调用会弹出CMD窗口
subprocess.run(["edge-tts.exe", "--text", "Hello", "--output", "output.mp3"])2. 添加隐藏窗口的参数(Windows 系统)
使用 subprocess 的 creationflags 参数(Windows 特有),指定 CREATE_NO_WINDOW 标志隐藏窗口:
import subprocess
import sys
def call_edge_tts(args):
# 获取打包后 edge-tts.exe 的实际路径(兼容开发和打包环境)
if getattr(sys, 'frozen', False):
# 打包后的环境(通过 --add-data 或 --add-binary 添加的文件路径)
edge_tts_path = os.path.join(sys._MEIPASS, "edge-tts.exe")
else:
# 开发环境的路径
edge_tts_path = "tools/edge-tts.exe"
# 设置隐藏窗口的参数
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
# Windows 特有:强制不创建窗口
creationflags = subprocess.CREATE_NO_WINDOW if sys.platform == "win32" else 0
# 调用 edge-tts.exe 并隐藏窗口
result = subprocess.run(
[edge_tts_path] + args,
startupinfo=startupinfo,
creationflags=creationflags,
stdout=subprocess.PIPE, # 捕获输出(可选)
stderr=subprocess.PIPE # 捕获错误(可选)
)
return result
# 使用示例
call_edge_tts(["--text", "Hello World", "--output", "output.mp3"])关键参数说明:
subprocess.CREATE_NO_WINDOW:Windows 系统特有的标志,强制不为子进程创建控制台窗口(需要 Python 3.7+ 支持)。startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW:辅助设置窗口显示方式,配合隐藏窗口使用。- 路径处理:通过
sys._MEIPASS获取打包后edge-tts.exe的实际路径(因为单文件模式下资源会被解压到临时目录)。
重新打包
修改代码后,重新用你的命令打包即可:
pyinstaller --onefile --windowed text_to_speech.py --add-binary "tools/edge-tts.exe;."这样调用 edge-tts.exe 时就不会弹出 CMD 窗口了。核心是通过 subprocess 的参数控制外部程序的窗口显示行为,而非依赖 PyInstaller 的打包参数。

最近更新
- 2026-03-16 18:06
- 故事文本分镜分析与拆解模板
- 2026-03-15 00:37
- 文生图提示词优化技巧:具象化描述、要有画面感
- 2026-03-12 17:04
- 除了国风动漫还有哪些常见的动漫风格适合 AI 绘画?
- 2026-03-12 16:35
- 水墨写实、水墨写意有什么区别,还有哪些水墨家族?
- 2026-03-12 16:22
- 分享5个治愈系漫剧高频场景提示词,包括(色调、光影、风格、质感)
- 2026-03-12 16:06
- 分享10个宅斗漫剧高频场景提示词,包括(色调、光影、风格、质感)
- 2026-03-12 15:56
- 分享10个古言漫剧高频场景提示词,包括(色调、光影、风格、质感)
- 2026-03-10 19:11
- 按人物主体公式写10个与李白同时期不同诗人不同环境的提示词(唯美古风)
- 2026-03-10 18:58
- 即梦唯美古风专用、可直接复制粘贴的常用词库
- 2026-03-10 18:44
- 即梦文生图提示词12套主体完整公式(全品类、无遗漏)