You need to enable JavaScript to run this app. PyInstaller打包生成exe文件运行时报failed to execute script错误如何解决
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 23:06:11