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

如何将child_process中exec()执行tasklist的结果转为JSON格式?

将tasklist输出转换为JSON格式的简便方案

优先推荐:利用tasklist内置参数输出CSV格式再解析

Windows的tasklist命令支持直接输出结构化的CSV格式,这比解析纯文本表格更简单可靠。只需添加/fo csv参数指定输出格式,/nh参数可去掉表头行(可选)。

代码示例(使用第三方CSV解析库)

先安装csv-parser模块:

npm install csv-parser

编写代码:

const { exec } = require('child_process');
const csv = require('csv-parser');
const { PassThrough } = require('stream');

// 执行tasklist并指定输出CSV格式,编码设为utf16le适配Windows Unicode输出
exec('tasklist /fo csv /nh', { encoding: 'utf16le' }, (err, stdout, stderr) => {
  if (err) {
    console.error('执行出错:', err);
    return;
  }

  const processList = [];
  // 将字符串转为流,方便用csv-parser处理
  const stream = new PassThrough();
  stream.end(stdout);

  stream
    .pipe(csv({
      // 自定义表头字段名
      headers: ['imageName', 'pid', 'sessionName', 'sessionNumber', 'memUsage']
    }))
    .on('data', (data) => {
      // 可选:将数字类型字段转为数值
      data.pid = parseInt(data.pid, 10);
      data.sessionNumber = parseInt(data.sessionNumber, 10);
      data.memUsage = parseInt(data.memUsage.replace(/[,\sK]/g, ''), 10);
      processList.push(data);
    })
    .on('end', () => {
      console.log('转换后的JSON:', JSON.stringify(processList, null, 2));
    });
});

代码示例(无第三方依赖,手动解析CSV)

如果不想安装额外模块,可自行解析CSV字符串:

const { exec } = require('child_process');

exec('tasklist /fo csv /nh', { encoding: 'utf16le' }, (err, stdout, stderr) => {
  if (err) {
    console.error('执行出错:', err);
    return;
  }

  // 按行分割并过滤空行
  const lines = stdout.split('\r\n').filter(line => line.trim() !== '');
  const headers = ['imageName', 'pid', 'sessionName', 'sessionNumber', 'memUsage'];
  
  const processList = lines.map(line => {
    // 匹配CSV字段(处理带引号的含空格字段)
    const values = line.match(/"[^"]+"|[^,]+/g).map(val => val.replace(/^"|"$/g, ''));
    
    return headers.reduce((obj, key, index) => {
      let value = values[index];
      // 类型转换
      switch(key) {
        case 'pid':
        case 'sessionNumber':
          obj[key] = parseInt(value, 10);
          break;
        case 'memUsage':
          obj[key] = parseInt(value.replace(/[,\sK]/g, ''), 10);
          break;
        default:
          obj[key] = value;
      }
      return obj;
    }, {});
  });

  console.log('转换后的JSON:', JSON.stringify(processList, null, 2));
});

备选方案:解析原始表格文本

如果必须处理原始表格输出(不使用CSV参数),可通过分析列宽度分割每行数据:

const { exec } = require('child_process');

exec('tasklist', { encoding: 'utf16le' }, (err, stdout, stderr) => {
  if (err) {
    console.error('执行出错:', err);
    return;
  }

  const lines = stdout.split('\r\n').filter(line => line.trim() !== '');
  if (lines.length < 3) return;

  // 提取表头和分隔线,计算列宽度
  const headerLine = lines[0].trim();
  const separatorLine = lines[1].trim();
  const columnWidths = [];
  let currentWidth = 0;

  for (const char of separatorLine) {
    if (char === '=') {
      currentWidth++;
    } else if (currentWidth > 0) {
      columnWidths.push(currentWidth);
      currentWidth = 0;
    }
  }
  if (currentWidth > 0) columnWidths.push(currentWidth);

  // 生成表头字段名
  const headers = columnWidths.map((width, idx) => {
    const start = idx === 0 ? 0 : columnWidths.slice(0, idx).reduce((a, b) => a + b, 0);
    return headerLine.substr(start, width).trim().replace(/\s+/g, '');
  });

  // 处理数据行
  const processList = lines.slice(2).map(line => {
    return headers.reduce((obj, key, idx) => {
      const start = idx === 0 ? 0 : columnWidths.slice(0, idx).reduce((a, b) => a + b, 0);
      let value = line.substr(start, columnWidths[idx]).trim();
      
      // 类型转换
      if (key === 'PID' || key === 'Session#') {
        obj[key] = parseInt(value, 10);
      } else if (key === 'MemUsage') {
        obj[key] = parseInt(value.replace(/[,\sK]/g, ''), 10);
      } else {
        obj[key] = value;
      }
      return obj;
    }, {});
  });

  console.log('转换后的JSON:', JSON.stringify(processList, null, 2));
});

关键注意点

  • 编码设置:Windows下tasklist的输出默认是Unicode(utf16le),因此exec必须指定encoding: 'utf16le',否则会出现乱码。
  • 类型转换:根据需求将PID、会话号、内存占用等字段转为数值类型,方便后续查询计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 18:01:29