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();
添加回答
举报