當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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])。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。