【问题标题】:nodejs child_process exec 'java -version'nodejs child_process exec 'java -version'
【发布时间】:2014-02-03 15:22:39
【问题描述】:

嘿,我正在 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 }

有什么想法吗? 谢谢 橡木

附言

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

编辑:

来自 nodejs 文档

"成功时error为null,出错时error为Error实例,err.code为子进程的退出码,err.signal设置为终止进程的信号。”

【问题讨论】:

    标签: java javascript windows node.js cmd


    【解决方案1】:

    有趣的是,在研究 nodejs 源代码后,我看到 exec 函数使用 'cmd /s /c [command]' 然后我尝试在没有 cmd 的情况下运行相同的命令。发现我仍然收到此消息。 原来这个bug和cmd有关,所以我搜索了一下,想出了解决办法。

    正确答案请看这里:https://stackoverflow.com/a/13343337/1211174

    总结答案:cmd 有自动运行的选项。这个自动运行失败了。然后 cmd 写入 stderr 然后许多 nodejs 失败 - 因为他们只检查 if (error != null) 而没有检查 error.code ...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-05
      • 2013-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多