nodejs child_process exec'java -version'

嘿,我在nodejsshell中运行下面的代码

exec = require('child_process').exec 

现在我有exec var作为函数。 然后我跑

  exec('java',function (error, stdout, stderr) {console.log(error)}); 

  exec('java -version',function (error, stdout, stderr) {console.log(error)}) 

第一个输出是:

  { [Error: Command failed: The system cannot find the path specified. 

但输出继续下去,我得到了真正的输出从Java即:

  Usage: java [-options] class [args...] (to execute a class) or java [-options] -jar jarfile [args...] (etc....) 

我的第二次尝试与'java -version'我得到

  { [Error: Command failed: The system cannot find the path specified. java version "1.7.0_10" Java(TM) SE Runtime Environment (build 1.7.0_10-b18) Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode) ] killed: false, code: 1, signal: null } 

有任何想法吗? 谢谢橡树

PS

我在Windows 8上运行我有JAVA_HOME设置,我有我的PATH %JAVA_HOME%\bin如果我从命令行运行java -version一切正常。 “node -version” v0.10.22

编辑:

来自nodejs文档

“成功时,错误将为空,错误时,错误将是Error的一个实例,err.code将是subprocess的退出代码,err.signal将被设置为终止进程的信号。

Solutions Collecting From Web of "nodejs child_process exec'java -version'"

有趣的是,在调查nodejs源代码后,我看到exec函数使用'cmd /s /c [command]'然后我尝试运行没有cmd的相同命令。 发现我仍然得到这个消息。 事实证明,这个bug与cmd有关,所以我搜索了它,并提出了解决方案。

为正确的答案去这里: https : //stackoverflow.com/a/13343337/1211174

总结答案:CMD有自动运行的选项。 和这个自动运行faild。 然后cmd写到stderr,然后很多nodejs faild – 因为他们只是检查if (error != null)而不是检查error.code …