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

Is it possible to put a system output into a var in javascript?

有没有办法将系统 shell 输出的结果放入 var 例如:

exec('echo test', (error, stdout, stderr) => {
  if (error) {
    console.error(`exec error: ${error}`);
    return;
  }
  console.log(`stdout: ${stdout}`);
});

并将控制台日志输出保存到 var

有几种方法!首先,您应该注意,在上面的示例中,stdout 已经在适当命名的变量中可用:

exec('echo test', (error, stdout, stderr) => {
  if (error) {
    console.error(`exec error: ${error}`);
    return;
  }
  console.log(`stdout: ${stdout}`); // right here
});

但是,我假设您希望能够在回调之外访问该值。您可以依赖 exec returns 一个 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 同步执行您的子进程,在这种情况下,您的标准输出只是直接从调用中作为缓冲区返回:

const stdout = execSync('echo test').toString();