nodejs child_process exec'java -version'

时间:2014-01-15 08:44:26

标签: java javascript windows node.js cmd

嘿,我在nodejs shell中运行以下代码

 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 }

任何想法? 谢谢 橡木

P.S

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

编辑:

来自nodejs doc

  

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

1 个答案:

答案 0 :(得分:4)

有趣,在调查了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 ......