如何隐藏subprocess.run调用时弹出的终端窗口?
解决PyInstaller打包后subprocess调用弹出终端的问题
方法1:修改subprocess.run参数(推荐)
在调用subprocess.run()时添加creationflags=subprocess.CREATE_NO_WINDOW参数,该参数会让Windows系统不创建新终端窗口执行子进程。
修改后的示例代码:
import subprocess command = ["powershell", "-Command", "Get-ChildItem"] subprocess.run(command, creationflags=subprocess.CREATE_NO_WINDOW)
如果程序需要跨平台兼容,可以通过判断操作系统来选择性添加参数:
import subprocess import os command = ["powershell", "-Command", "Get-ChildItem"] kwargs = {} if os.name == 'nt': # 仅在Windows系统下启用该参数 kwargs["creationflags"] = subprocess.CREATE_NO_WINDOW subprocess.run(command, **kwargs)
方法2:打包时启用无控制台模式
如果主程序本身不需要显示终端窗口,打包时添加--windowed(或--noconsole)参数,主程序运行时不会弹出终端,子进程也不会额外弹出窗口。
修改后的打包命令:
PS> pyinstaller --windowed script.py
注意:此方法会禁用主程序的控制台输出,若程序需要日志输出或用户交互,不建议使用。
补充示例(CMD命令场景)
如果调用的是CMD命令,同样可以用上述方式处理:
import subprocess subprocess.run(["cmd", "/c", "dir"], creationflags=subprocess.CREATE_NO_WINDOW)
内容的提问来源于stack exchange,提问作者Philip Nelson
相关产品推荐
相关产品推荐

