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

执行subprocess时监控生成文件大小并在超限时终止进程的实现方案

实现方案

你给出的参考代码存在逻辑错误:循环内每次都会启动新的subprocess进程,既不会持续监控已有进程生成的文件大小,还会生成大量冗余进程,完全无法满足需求。

正确实现逻辑如下:

  • 先启动subprocess子进程,不要放在循环内重复创建
  • 进入轮询循环,同时检查子进程运行状态和目标文件大小
  • 若文件大小超过阈值,终止子进程并做资源回收
  • 若子进程正常执行结束,直接跳出循环完成流程

可直接运行的示例代码:

import os
import subprocess
import time

# 自定义配置项
target_file = "待生成的目标文件路径"
max_size = 10 * 1024 * 1024  # 示例阈值为10MB,单位为字节
exec_cmd = ['你的执行命令', '命令参数1', '命令参数2']  # 替换为实际会生成上述target_file的命令

# 启动子进程
proc = subprocess.Popen(exec_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)

try:
    while True:
        # 先判断子进程是否已经正常结束
        if proc.poll() is not None:
            break
        # 避免文件还未生成时报错
        if os.path.exists(target_file):
            current_size = os.path.getsize(target_file)
            if current_size >= max_size:
                # 超过阈值终止进程,可根据需求替换为kill()强制杀进程
                proc.terminate()
                proc.wait(timeout=5)
                print(f"文件大小超出阈值,已终止子进程,当前文件大小{current_size}字节")
                break
        # 调整轮询间隔,平衡检测精度和CPU占用
        time.sleep(0.5)
    # 可选:获取进程执行输出和错误信息
    stdout, stderr = proc.communicate()
except Exception as e:
    # 异常场景保证子进程不残留
    if proc.poll() is None:
        proc.kill()
        proc.wait()
    raise e

相关注意事项:

  • 可根据实际业务需求调整轮询间隔,对大小控制精度要求高就缩小间隔,想要降低CPU占用就放大间隔
  • 子进程终止后可按需添加删除超阈值文件的清理逻辑
  • 如果子进程存在忽略terminate()信号的情况,可以替换为kill()强制终止进程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:36:02