Node.js child_process.exect stdout 返回 null,但 stderr 没有

问题描述

目前,我有一个简单的代码,它在命令行中执行 java -version 以检查用户是否安装了 Java。

奇怪的是,当我运行这段代码时,stdout 什么也没给我,但 stderr 给了我想要的结果。

cprocess.execSync("java -version",(err,stdout,stderr) => {
  console.log("stdout: " + stdout); // nothing
  console.log("stderr: " + stderr); // output: java version
}

为什么会这样?我需要更改 exec 选项中的任何内容吗?

解决方法

execSync 不接受回调参数,但 exec 接受。问题的文本引用了 exec,而您共享的代码片段引用了 execSync,所以我猜您的意思是 exec

假设您真的打算使用 exec,回调是正确的,问题不在于代码,而是您正在调用的 java -version 命令 - 该命令将信息输出到 stderr ,不是标准输出。你可以重定向它,但老实说,我不会打扰 - 你可以只使用 stderr 输出。