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

用subprocess调用TaskList编译为EXE后弹窗问题求助

解决Windows EXE运行时调用tasklist弹出终端窗口的问题

问题根源是Windows环境下,subprocess调用外部命令时默认会为子进程创建控制台窗口,编译成EXE后这个窗口会在每次扫描时弹出。只需给subprocess调用添加creationflags=subprocess.CREATE_NO_WINDOW参数即可阻止窗口弹出。

修改后的完整代码如下:

import subprocess
from time import sleep
import logging

logger = logging.getLogger(__name__)

def check_process_running(self):
    process_name = b'CUSTOM_APP.exe'
    get_tasklist = 'TASKLIST'
    # 添加creationflags参数阻止终端窗口弹出
    tasklist = subprocess.check_output(
        get_tasklist,
        creationflags=subprocess.CREATE_NO_WINDOW
    )
    proc_data = [row for row in tasklist.split(b'\n') if row.startswith(process_name)]
    return proc_data  # 补充原代码缺失的返回值,确保上层能获取扫描结果

def events_tracker(self):
    while True:
        try:
            tasks = self.check_process_running()
            # some calculations 
        except Exception as e:
            logger.exception("event capture triggered exception "+str(e))
        sleep(5)  # 统一使用已导入的sleep方法

关键说明:

  • subprocess.CREATE_NO_WINDOW是Windows平台特有的进程创建标志,会告知系统不为子进程生成控制台窗口。
  • 原代码中check_process_running函数缺少返回值,补充return proc_data后才能让events_tracker获取到扫描到的进程数据。
  • 若使用PyInstaller编译EXE,建议额外添加--noconsole参数(如果主程序本身不需要控制台),进一步避免不必要的控制台窗口弹出。

内容的提问来源于stack exchange,提问作者Ashan Jayasundara

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 18:10:37