PyInstaller打包生成exe文件运行时报failed to execute script错误如何解决
PyInstaller打包运行
Failed to execute script报错解决 报错原因
- 无控制台模式输出异常:若打包时添加了
-w/--windowed参数生成无控制台程序,程序不存在标准输出流,代码中的print("no")会抛出IO错误直接终止运行。 - subprocess调用适配问题:
subprocess.check_output执行tasklist时,Windows环境默认输出为GBK编码,直接用str()转换会触发解码错误;同时该方法在命令执行返回非0退出码时会抛出CalledProcessError,未捕获异常会导致程序崩溃。 - 自销毁逻辑触发:若打包后的exe文件名为
myapp.exe,当系统未运行notepad.exe时,代码会直接执行TASKKILL杀掉自身进程,导致程序启动后立刻退出。
修复方案
1. 修改适配代码
import sys import os import subprocess def process_exists(process_name): try: # 明确指定编码读取输出,适配Windows中文环境 progs = subprocess.check_output('tasklist', shell=True, encoding='gbk') return process_name.lower() in progs.lower() except subprocess.CalledProcessError: # 命令执行失败时兜底返回,避免崩溃 return False if __name__ == "__main__": # 判断是否为打包后的运行环境,重定向输出避免无控制台时报错 if getattr(sys, 'frozen', False): sys.stdout = open(os.devnull, 'w') sys.stderr = open(os.devnull, 'w') while True: if not process_exists("notepad.exe"): # 注意此处填写的进程名不要和自身打包后的exe文件名一致 os.system("TASKKILL /F /IM myapp.exe") print("no")
2. 打包命令调整
- 若需要无控制台运行,使用命令:
pyinstaller -F -w 你的脚本文件名.py - 若需要调试查看具体报错,去掉
-w参数保留控制台,使用命令:pyinstaller -F 你的脚本文件名.py
内容的提问来源于stack exchange,提问作者NoobInCoding
相关产品推荐
相关产品推荐

