Skip to content

如何在 Node.js 中执行命令行二进制文件

Posted on:2023年11月4日 at 22:05

在 Node.js 中,可以通过 child_process 模块来执行命令行二进制文件。该模块提供了 exec()spawn() 两个函数,用于在子进程中执行命令。

exec() 函数用于执行一个命令并返回其完整输出。如果命令执行成功,则 exec() 函数会返回一个包含 stdoutstderr 的对象,其中 stdout 是命令的标准输出,stderr 是命令的标准错误。如果命令执行失败,则 exec() 函数会返回一个错误对象。

spawn() 函数用于创建一个子进程并在其中执行一个命令。该函数会返回一个 ChildProcess 对象,该对象可以用来控制子进程并获取其输出。

以下是一个使用 exec() 函数执行命令行二进制文件的示例:

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

// 执行命令 "prince -v builds/pdf/book.html -o builds/pdf/book.pdf"
const { stdout, stderr } = await exec(
  "prince -v builds/pdf/book.html -o builds/pdf/book.pdf"
);

if (stderr) {
  // 命令执行失败
  console.error(stderr);
} else {
  // 命令执行成功
  console.log(stdout);
}

以下是一个使用 spawn() 函数执行命令行二进制文件的示例:

const { spawn } = require("child_process");

// 创建一个子进程并在其中执行命令 "prince -v builds/pdf/book.html -o builds/pdf/book.pdf"
const child = spawn("prince", [
  "-v",
  "builds/pdf/book.html",
  "-o",
  "builds/pdf/book.pdf",
]);

// 获取子进程的标准输出
child.stdout.on("data", chunk => {
  console.log(chunk);
});

// 获取子进程的标准错误
child.stderr.on("data", chunk => {
  console.error(chunk);
});

// 子进程退出时触发
child.on("exit", code => {
  console.log(`子进程退出,退出码:${code}`);
});

哪个函数更适合使用取决于具体的场景。如果只需要获取命令的完整输出,则可以使用 exec() 函数。如果需要控制子进程并在其退出时获取其输出,则可以使用 spawn() 函数。

注意事项