1 回答

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超6個(gè)贊
有幾種方法!首先,您應(yīng)該注意,在上面的示例中,標(biāo)準(zhǔn)輸出已經(jīng)在適當(dāng)命名的變量中可用:
exec('echo test', (error, stdout, stderr) => {
if (error) {
console.error(`exec error: ${error}`);
return;
}
console.log(`stdout: ${stdout}`); // right here
});
但是,我假設(shè)您希望能夠在回調(diào)之外訪問(wèn)該值。您可以依靠exec返回 a的事實(shí),ChildProcess而后者又公開(kāi)了一個(gè)表示進(jìn)程標(biāo)準(zhǔn)輸出的可讀流:
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
});
但是您還應(yīng)該注意,盡管從技術(shù)上講,該變量可以在回調(diào)之外訪問(wèn),但實(shí)際上直到另一個(gè)回調(diào)之后才準(zhǔn)備好。這是因?yàn)閑xec是異步的,所以它的結(jié)果同樣需要異步訪問(wèn)。
如果這給您的用例帶來(lái)了問(wèn)題,一種替代方法是使用同步執(zhí)行您的子進(jìn)程execSync,在這種情況下,您的 stdout 只是直接從調(diào)用中作為緩沖區(qū)返回:
const stdout = execSync('echo test').toString();
添加回答
舉報(bào)