为了账号安全,请及时绑定邮箱和手机立即绑定

是否可以将系统输出放入 javascript 中的 var 中?

是否可以将系统输出放入 javascript 中的 var 中?

30秒到达战场 2022-01-20 17:26:27
有没有办法将系统 shell 输出的结果放入 var 中,例如:exec('echo test', (error, stdout, stderr) => {  if (error) {    console.error(`exec error: ${error}`);    return;  }  console.log(`stdout: ${stdout}`);});并将控制台日志输出保存到 var
查看完整描述

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();


查看完整回答
反对 回复 2022-01-20
  • 1 回答
  • 0 关注
  • 131 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信