嘿,我在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将被设置为终止进程的信号。“
答案 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 ......