child_process.execFileSync(file[, args][, options])


  • file <string> 要运行的可执行文件的名称或路径。
  • args <string[]> 字符串参数列表。
  • options <Object>
    • cwd <string> | <URL> 子进程的当前工作目录。
    • input <string> | <Buffer> | <TypedArray> | <DataView> 将作为标准输入传递给生成的进程的值。如果 stdio[0] 设置为 'pipe',提供此值将覆盖 stdio[0]
    • stdio <string> | <Array> 子进程的 stdio 配置。请参见 child_process.spawn()stdio。默认情况下,stderr 将输出到父进程的 stderr,除非指定了 stdio默认值: 'pipe'
    • env <Object> 环境键值对。默认值: process.env
    • uid <number> 设置进程的用户身份(参见 setuid(2))。
    • gid <number> 设置进程的组标识(参见 setgid(2))。
    • timeout <number> 进程允许运行的最长时间(毫秒)。默认值: undefined
    • killSignal <string> | <integer> 在终止被生成的进程时使用的信号值。默认值: 'SIGTERM'
    • maxBuffer <number> 允许在 stdout 或 stderr 上的最大字节数据量。如果超过此限制,子进程将被终止。请参阅 maxBuffer 和 Unicode 中的注意事项。默认值: 1024 * 1024
    • encoding <string> 所有标准输入和输出使用的编码方式。 默认值: 'buffer'
    • windowsHide <boolean> 隐藏通常在 Windows 系统上创建的子进程控制台窗口。默认值: false
    • shell <boolean> | <string> 如果为 true,将在 shell 中运行 command。在 Unix 上使用 '/bin/sh',在 Windows 上使用 process.env.ComSpec。可以通过字符串指定不同的 shell。参见 Shell 要求默认 Windows shell默认值: false(不使用 shell)。
  • 返回:<Buffer> | <string> 命令的标准输出。

child_process.execFileSync() 方法通常与 child_process.execFile() 完全相同,唯一的区别是该方法在子进程完全关闭之前不会返回。当遇到超时并发送 killSignal 时,该方法不会返回,直到进程完全退出。

🌐 The child_process.execFileSync() method is generally identical to child_process.execFile() with the exception that the method will not return until the child process has fully closed. When a timeout has been encountered and killSignal is sent, the method won't return until the process has completely exited.

如果子进程拦截并处理 SIGTERM 信号且没有退出,父进程仍然会等待直到子进程退出。

🌐 If the child process intercepts and handles the SIGTERM signal and does not exit, the parent process will still wait until the child process has exited.

如果进程超时或有非零退出代码,此方法将抛出一个 Error,其中将包含底层 child_process.spawnSync() 的完整结果。

🌐 If the process times out or has a non-zero exit code, this method will throw an Error that will include the full result of the underlying child_process.spawnSync().

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

const { execFileSync } = require('node:child_process');

try {
  const stdout = execFileSync('my-script.sh', ['my-arg'], {
    // Capture stdout and stderr from child process. Overrides the
    // default behavior of streaming child stderr to the parent stderr
    stdio: 'pipe',

    // Use utf8 encoding for stdio pipes
    encoding: 'utf8',
  });

  console.log(stdout);
} catch (err) {
  if (err.code) {
    // Spawning child process failed
    console.error(err.code);
  } else {
    // Child was spawned but exited with non-zero exit code
    // Error contains any stdout and stderr from the child
    const { stdout, stderr } = err;

    console.error({ stdout, stderr });
  }
}import { execFileSync } from 'node:child_process';

try {
  const stdout = execFileSync('my-script.sh', ['my-arg'], {
    // Capture stdout and stderr from child process. Overrides the
    // default behavior of streaming child stderr to the parent stderr
    stdio: 'pipe',

    // Use utf8 encoding for stdio pipes
    encoding: 'utf8',
  });

  console.log(stdout);
} catch (err) {
  if (err.code) {
    // Spawning child process failed
    console.error(err.code);
  } else {
    // Child was spawned but exited with non-zero exit code
    // Error contains any stdout and stderr from the child
    const { stdout, stderr } = err;

    console.error({ stdout, stderr });
  }
}