![](/img/trans.png)
[英]Java ProcessBuilder().start() vs. NodeJS require('child_process').spawn()
[英]nodejs child_process exec 'java -version'
嘿,我在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 }
有任何想法嗎? 謝謝橡樹
ps
我在運行Windows 8
,我有JAVA_HOME
設置和我有%JAVA_HOME%\\bin
在我的PATH
如果我在命令行中運行java -version一切正常。 “節點-版本” v0.10.22
編輯:
從nodejs文檔
“成功時,錯誤將為null。錯誤時,錯誤將是Error的一個實例,而err.code將是子進程的退出代碼,而err.signal將被設置為終止該進程的信號。”
有趣的是,在研究了nodejs源代碼之后,我看到exec函數使用了'cmd /s /c [command]'
然后我嘗試在不使用cmd的情況下運行相同的命令。 發現我仍然收到這條信息。 原來,該錯誤與cmd有關,因此我進行了搜索並提出了解決方案。
對於正確的答案,請轉到此處: https : //stackoverflow.com/a/13343337/1211174
總結答案:cmd具有自動運行的選項。 並且此自動運行失敗。 然后將cmd寫入stderr,然后許多nodejs失敗-因為它們只是檢查if (error != null)
而沒有檢查error.code ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.