当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Node.js child_process.execFile(file[, args][, options][, callback])用法及代码示例


child_process.execFile(file[, args][, options][, callback])

历史
版本变化
v16.4.0、v14.18.0

cwd 选项可以是使用 file: 协议的 WHATWG URL 对象。

v15.4.0、v14.17.0

添加了AbortSignal 支持。

v8.8.0

现在支持windowsHide 选项。

v0.1.91

添加于:v0.1.91


参数

child_process.execFile() 函数与 child_process.exec() 类似,只是它默认不生成 shell。相反,指定的可执行文件 file 直接作为新进程生成,使其比 child_process.exec() 更高效。

支持与 child_process.exec() 相同的选项。由于未生成 shell,因此不支持 I/O 重定向和文件通配等行为。

const { execFile } = require('node:child_process');
const child = execFile('node', ['--version'], (error, stdout, stderr) => {
  if (error) {
    throw error;
  }
  console.log(stdout);
});

传递给回调的 stdoutstderr 参数将包含子进程的 stdout 和 stderr 输出。默认情况下,Node.js 会将输出解码为 UTF-8 并将字符串传递给回调。 encoding 选项可用于指定用于解码 stdout 和 stderr 输出的字符编码。如果 encoding'buffer' 或无法识别的字符编码,则将 Buffer 对象传递给回调。

如果此方法作为其 util.promisify() ed 版本调用,它会为具有 stdoutstderr 属性的 Object 返回 Promise。返回的ChildProcess 实例作为child 属性附加到Promise。如果发生错误(包括导致退出代码不是 0 的任何错误),将返回一个被拒绝的 promise,并在回调中给出相同的 error 对象,但具有两个附加属性 stdoutstderr

const util = require('node:util');
const execFile = util.promisify(require('node:child_process').execFile);
async function getVersion() {
  const { stdout } = await execFile('node', ['--version']);
  console.log(stdout);
}
getVersion();

如果启用了 shell 选项,请不要将未经处理的用户输入传递给此函数。任何包含 shell 元字符的输入都可用于触发任意命令执行。

如果启用了 signal 选项,则在相应的 AbortController 上调用 .abort() 与在子进程上调用 .kill() 类似,只是传递给回调的错误将是 AbortError

const { execFile } = require('node:child_process');
const controller = new AbortController();
const { signal } = controller;
const child = execFile('node', ['--version'], { signal }, (error) => {
  console.log(error); // an AbortError
});
controller.abort();

相关用法


注:本文由纯净天空筛选整理自nodejs.org大神的英文原创作品 child_process.execFile(file[, args][, options][, callback])。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。