You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySimpleGUI脚本打包exe后subprocess.Popen子进程重复创建求助

解决PySimpleGUI打包exe后重复创建子进程的问题

问题根源

打包成exe后,sys.executable指向的是当前打包好的主程序exe,而非Python解释器。你原来的代码subprocess.Popen([sys.executable, "sele.py"])会每次点击按钮都启动主程序本身,进而导致重复创建子进程。

解决方案

方案1:将sele.py单独打包为exe直接调用

  1. 用PyInstaller把sele.py打包成独立exe:
    pyinstaller --onefile sele.py
    
  2. 主程序中修改调用代码:
    elif event == 'web':
        # 确保sele.exe和主exe在同一目录,或指定完整路径
        subprocess.Popen("sele.exe", shell=True)
    

方案2:主程序打包时包含sele.py并修正路径

如果不想单独打包sele.py,需让主程序打包时包含该文件,并在运行时获取正确路径:

  1. 打包主程序时执行命令(Windows用;分隔,Mac/Linux用:):
    pyinstaller --onefile --add-data "sele.py;." your_main_script.py
    
  2. 主程序中添加路径处理逻辑并修改调用代码:
    import sys
    import os
    import subprocess
    import PySimpleGUI as sg
    
    def get_resource_path(relative_path):
        # 适配打包后的文件路径
        try:
            base_path = sys._MEIPASS
        except Exception:
            base_path = os.path.abspath(".")
        return os.path.join(base_path, relative_path)
    
    # ... 其他GUI代码 ...
    
    elif event == 'web':
        sele_path = get_resource_path("sele.py")
        # 非打包环境用sys.executable,打包后直接调用系统python解释器
        python_cmd = sys.executable if not getattr(sys, 'frozen', False) else 'python'
        subprocess.Popen([python_cmd, sele_path])
    

方案3:结合多线程+路径修正(避免GUI阻塞)

如果之前试过多线程无效,大概率是路径没处理对,结合路径修正的多线程写法:

import threading

def run_sele():
    sele_path = get_resource_path("sele.py")
    python_cmd = sys.executable if not getattr(sys, 'frozen', False) else 'python'
    subprocess.Popen([python_cmd, sele_path])

# ... GUI代码 ...

elif event == 'web':
    threading.Thread(target=run_sele, daemon=True).start()

用线程启动既不会阻塞GUI,也能解决路径导致的重复进程问题。

注意事项

  • 打包时确认sele.py被正确包含,或sele.exe与主exe在同一目录
  • 若sele.py依赖第三方库(如selenium),打包时需确保这些库被正确打包
  • 可在sele.py开头加print("sele.py已启动"),通过控制台输出验证是否解决重复进程问题

内容的提问来源于stack exchange,提问作者Muhammad Hussnain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 13:18:00