Node.js 子进程运行CMD命令详解

 更新时间:2025年09月11日 11:21:26   作者:卿·静  
本文介绍了在Node.js中通过child_process模块使用exec、execFile 和spawn三种方法来创建子进程运行cmd运行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

本文将介绍如何在 Node.js 中通过 child_process 模块使用 exec、execFile 和 spawn 三种方法来创建子进程运行cmd运行,并通过示例说明了每种方法的参数和输出处理方式。

在介绍子进程前先创建一个node脚本名为printArgs.js,该脚本的作用是接收参数并将参数输出。后续将使用node子进程调用该脚本。脚本代码如下:

// 获取命令行参数,process.argv 是一个数组,其中包含了命令行参数
// 第一个元素是 node 的路径,第二个元素是脚本文件的路径,从第三个元素开始是用户传入的参数
const args = process.argv.slice(2);

// 打印传入的参数
console.log("传入的参数为:");
args.forEach((arg, index) => {
  setTimeout(() => {
    console.log(`${index + 1}: ${arg}`);
  }, (index + 1) * 1000);
});

该脚本通过 process.argv 获取命令行参数,并延迟打印每个参数,模拟异步处理流程。

  • process.argv:Node.js 中获取命令行参数的数组:
  • argv[0]: Node 可执行文件路径
  • argv[1]: 当前执行的脚本路径
  • argv[2...]: 用户输入的参数
  • setTimeout:每个参数延迟 (index + 1) * 1000 毫秒后打印

创建index.js脚本,引入了 Node.js 的 child_process 模块中的三个方法,下面将分别介绍这三个方法的区别

const { exec, execFile, spawn } = require("child_process");

1.exec

let execChild = exec(
  "node ./printArgs.js aaa bbb ccc",
  { encoding: "utf8" },
  (error, stdout, stderr) => {
    if (error) {
      console.log(`执行错误:${error}`);
      return;
    }

    if (stderr) {
      console.log(`stderr: ${stderr}`);
    }
    console.log(`stdout: ${stdout}`);
  }
);

execChild.on("close", (code) => {
  console.log(`子进程退出,退出码$[code]`);
})

方法说明:   exec(command[, options][, callback])

适用场景:执行一条 shell 命令并一次性获取输出(适合小输出量任务),即运行printArgs脚本后将等待3秒一次性输出 aaa bbb ccc

参数:

  • command:完整的 shell 命令字符串。
  • encoding: 设置输出编码,如 "utf8"。
  • callback:回调函数,获取 error、stdout(标准输出)、stderr(错误输出)
  • execChild.on("close", callback):监听子进程关闭事件,获取退出码。

2.execFile

let fileChild = execFile(
  "node",
  ["printArgs.js", "aaa", "bbb", "ccc"],
  { encoding: "utf8", cwd: "" }, //cwd为工作目录
  (error, stdout, stderr) => {
    if (error) {
      console.error(`执行出错: ${error}`);
      return;
    }
    if (stderr) {
      console.error(`stderr: ${stderr}`);
    }
    console.log(`stdout: ${stdout}`);
  }
);

fileChild.on("close", (code) => {
  console.log(`子进程退出,退出码$[code]`);
});

方法说明   execFile(file[, args][, options][, callback])

适用场景:直接运行某个可执行文件,代码中使用node执行printArgs脚本,等待3秒后一次性输出 aaa bbb ccc

参数:

  • file: 可执行文件或脚本(如 node)。
  • args: 参数数组,即["printArgs.js", "aaa", "bbb", "ccc"]
  • cwd: 工作目录(空字符串为当前目录)。
  • encoding: 输出编码。
  • callback: 同上,获取输出结果。
  • fileChild.on("close", callback):监听子进程关闭事件,获取退出码。

3.spawn

const spawnChild = spawn("node", ["./printArgs.js", "aaa", "bbb", "ccc"], {
  shell: true,
}); // 在 Windows 上执行 CMD 命令时,通常需要设置 { shell: true }

spawnChild.stdout.on("data", (data) => {
  console.log(`stdout: ${data}`);
});

spawnChild.stderr.on("data", (data) => {
  console.error(`stderr: ${data}`);
});

spawnChild.on("close", (code) => {
  console.log(`子进程退出,退出码 $[code]`);
})

方法说明   spawn(command[, args][, options])

适用场景:持续处理大数据流、监听标准输出/错误(如服务器日志),代码中调用printArgs脚本将每隔1秒输出内容

参数:

  • command: 执行命令。
  • args: 参数数组,即["./printArgs.js", "aaa", "bbb", "ccc"]
  • shell: true:在 Windows 下推荐启用,执行 shell 命令时必要。
  • spawnChild.on实时监听标准输出/错误。

总结对比

方法是否用 shell适用场景是否支持大数据流回调/事件模型
exec简单命令 + 小输出回调函数
execFile执行文件 + 安全性要求高回调函数
spawn否(可选)大数据流 / 持续输出任务事件监听

到此这篇关于Node.js 子进程运行CMD命令详解的文章就介绍到这了,更多相关Node.js 子进程运行CMD内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一会带你学会用Webpack搭建开发环境并打包代码

    一会带你学会用Webpack搭建开发环境并打包代码

    这篇文章主要给大家介绍了关于如何用Webpack搭建开发环境并打包的相关资料,webpack是一个现代JavaScript应用程序的静态模块打包器(module bundler),需要的朋友可以参考下
    2023-08-08
  • Node.js 中判断一个文件是否存在

    Node.js 中判断一个文件是否存在

    这篇文章主要记录一些 Node.js 应用中的小知识点,如果你 Google/Baidu “Node.js 如何判断文件是否存在” 发现给出的很多答案还是使用的 fs.exists,这里不推荐使用 fs.exists 你可以选择 fs.stat 或 fs.access。
    2020-08-08
  • 基于nodejs的微信JS-SDK简单应用实现

    基于nodejs的微信JS-SDK简单应用实现

    这篇文章主要介绍了基于nodejs的微信JS-SDK简单应用实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • nodejs更改项目端口号的方法

    nodejs更改项目端口号的方法

    今天小编就为大家分享一篇nodejs更改项目端口号的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • node.js中的fs.fchmod方法使用说明

    node.js中的fs.fchmod方法使用说明

    这篇文章主要介绍了node.js中的fs.fchmod方法使用说明,本文介绍了fs.fchmod的方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下
    2014-12-12
  • Node.js npm命令运行node.js脚本的方法

    Node.js npm命令运行node.js脚本的方法

    今天小编就为大家分享一篇Node.js npm命令运行node.js脚本的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • Node.js之如何构建UDP服务

    Node.js之如何构建UDP服务

    这篇文章主要介绍了Node.js之如何构建UDP服务问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-09-09
  • Windows 系统下安装和部署Egret的开发环境

    Windows 系统下安装和部署Egret的开发环境

    Egret基于TypeScript开发的,而TypeScript编译工具tsc是基于Node.js 开发的。所以在安装过程中,我们先需要对于基础支持工具进行安装。
    2014-07-07
  • 3分钟快速搭建nodejs本地服务器方法运行测试html/js

    3分钟快速搭建nodejs本地服务器方法运行测试html/js

    本篇文章主要介绍了3分钟快速搭建nodejs本地服务器方法运行测试html/js,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-04-04
  • nodeJS模块简单用法示例

    nodeJS模块简单用法示例

    这篇文章主要介绍了nodeJS模块简单用法,结合实例形式简单分析了nodejs模块定义、引入、注册、启动等相关操作技巧,需要的朋友可以参考下
    2018-04-04

最新评论