child_process.execFile(file[, args][, options][, callback])
| 版本 | 變化 | 
|---|---|
| v16.4.0、v14.18.0 | 
  | 
| v15.4.0、v14.17.0 | 添加了AbortSignal 支持。  | 
| v8.8.0 | 現在支持  | 
| v0.1.91 | 添加於:v0.1.91  | 
參數
file<string> 要運行的可執行文件的名稱或路徑。args<string[]> 字符串參數列表。options<Object>cwd<string> | <URL> 子進程的當前工作目錄。env<Object> 環境鍵值對。 默認:process.env。encoding<string> 默認:'utf8'timeout<number> 默認:0maxBuffer<number>stdout 或 stderr 上允許的最大數據量(以字節為單位)。如果超過,則終止子進程並截斷任何輸出。請參閱警告maxBuffer和 Unicode.默認:1024 * 1024.killSignal<string> | <integer> 默認:'SIGTERM'uid<number> 設置進程的用戶身份(參見)。setuid(2)gid<number> 設置進程的組標識(參見)。setgid(2)windowsHide<boolean> 隱藏通常在 Windows 係統上創建的子進程控製台窗口。 默認:false。windowsVerbatimArguments<boolean> 在 Windows 上不對參數進行引用或轉義。在 Unix 上被忽略。 默認:false。shell<boolean> | <string> 如果true,在 shell 內運行command。在 Unix 上使用'/bin/sh',在 Windows 上使用process.env.ComSpec。可以將不同的 shell 指定為字符串。請參閱 Shell requirements 和 Default Windows shell 。 默認:false(無 shell )。signal<AbortSignal> 允許使用 AbortSignal 中止子進程。
callback<Function>進程終止時與輸出一起調用。- 返回: <ChildProcess>
 
child_process.execFile() 函數與   類似,隻是它默認不生成 shell。相反,指定的可執行文件 child_process.exec() file 直接作為新進程生成,使其比   更高效。child_process.exec() 
支持與  相同的選項。由於未生成 shell,因此不支持 I/O 重定向和文件通配等行為。child_process.exec() 
const { execFile } = require('node:child_process');
const child = execFile('node', ['--version'], (error, stdout, stderr) => {
  if (error) {
    throw error;
  }
  console.log(stdout);
});
傳遞給回調的 stdout 和 stderr 參數將包含子進程的 stdout 和 stderr 輸出。默認情況下,Node.js 會將輸出解碼為 UTF-8 並將字符串傳遞給回調。 encoding 選項可用於指定用於解碼 stdout 和 stderr 輸出的字符編碼。如果 encoding 是 'buffer' 或無法識別的字符編碼,則將 Buffer 對象傳遞給回調。
如果此方法作為其   ed 版本調用,它會為具有 util.promisify() stdout 和 stderr 屬性的 Object 返回 Promise。返回的ChildProcess 實例作為child 屬性附加到Promise。如果發生錯誤(包括導致退出代碼不是 0 的任何錯誤),將返回一個被拒絕的 promise,並在回調中給出相同的 error 對象,但具有兩個附加屬性 stdout 和 stderr 。
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();
相關用法
- Node.js child_process.exec(command[, options][, callback])用法及代碼示例
 - Node.js child_process.spawn(command[, args][, options])用法及代碼示例
 - Node.js child_process.fork(modulePath[, args][, options])用法及代碼示例
 - Node.js certificate.verifySpkac(spkac[, encoding])用法及代碼示例
 - Node.js console.timeEnd()用法及代碼示例
 - Node.js crypto.randomFill()用法及代碼示例
 - Node.js crypto.createHmac()用法及代碼示例
 - Node.js crypto.randomFillSync(buffer[, offset][, size])用法及代碼示例
 - Node.js console.countReset()用法及代碼示例
 - Node.js cluster.worker用法及代碼示例
 - Node.js crypto.constants用法及代碼示例
 - Node.js crypto.randomInt([min, ]max[, callback])用法及代碼示例
 - Node.js crypto.publicEncrypt()用法及代碼示例
 - Node.js console.trace()用法及代碼示例
 - Node.js console.timeLog()用法及代碼示例
 - Node.js console.timeStamp()用法及代碼示例
 - Node.js crypto.publicDecrypt()用法及代碼示例
 - Node.js console.dir()用法及代碼示例
 - Node.js crypto.pbkdf2Sync(password, salt, iterations, keylen, digest)用法及代碼示例
 - Node.js console.log()用法及代碼示例
 - Node.js crypto.createHash()用法及代碼示例
 - Node.js crypto.hkdfSync()用法及代碼示例
 - Node.js crypto.randomFillSync()用法及代碼示例
 - Node.js crypto.checkPrime()用法及代碼示例
 - Node.js clienthttp2session.request()用法及代碼示例
 
注:本文由純淨天空篩選整理自nodejs.org大神的英文原創作品 child_process.execFile(file[, args][, options][, callback])。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
