1 回答

TA貢獻1816條經驗 獲得超6個贊
有幾種方法!首先,您應該注意,在上面的示例中,標準輸出已經在適當命名的變量中可用:
exec('echo test', (error, stdout, stderr) => {
if (error) {
console.error(`exec error: ${error}`);
return;
}
console.log(`stdout: ${stdout}`); // right here
});
但是,我假設您希望能夠在回調之外訪問該值。您可以依靠exec返回 a的事實,ChildProcess而后者又公開了一個表示進程標準輸出的可讀流:
const subprocess = exec('echo test')
let stdout = "";
subprocess.stdout.on('data', (chunk) => {
stdout += chunk.toString();
});
subprocess.stdout.on('end', () => {
console.log(`stdout: ${stdout}`); // stdout is now complete
});
但是您還應該注意,盡管從技術上講,該變量可以在回調之外訪問,但實際上直到另一個回調之后才準備好。這是因為exec是異步的,所以它的結果同樣需要異步訪問。
如果這給您的用例帶來了問題,一種替代方法是使用同步執行您的子進程execSync,在這種情況下,您的 stdout 只是直接從調用中作為緩沖區返回:
const stdout = execSync('echo test').toString();
添加回答
舉報