2015-12-15 68 views
5

我正在編寫使用Win32 API檢測Java版本的代碼。例如。命令行「java -version」將結果發送到stdOut或stdErr?

基本上,我下面的MSDN Creating a Child Process with Redirected Input and Output https://msdn.microsoft.com/en-us/library/ms682499%28VS.85%29.aspx

string GetJavaVersion(string sJavaExePath) { 
} 

這是僞客戶端代碼:

ASSERT(GetJavaVersion("C:\Program Files (x86)\Java\jdk1.7.0_17\bin\java.exe") == "1.7.0_25"); 

我可以得到結果爲:

java version "1.7.0_25" 
Java(TM) SE Runtime Environment (build 1.7.0_25-b17) 
Java HotSpot(TM) Client VM (build 23.25-b01, mixed mode, sharing) 

然而,結果被送回從stdErr,雖然我應該從stdOut返回。

從stdErr接收字符串是否有意義?

+1

爲什麼?它在哪裏說它到標準輸出?你期望的基礎是什麼? – EJP

+0

我不知道Java使用stdout或stderr的轉換。我的基礎是在運行過程中,「似乎」沒有發生任何錯誤,所以期望它進入stdout是非常直觀的。 – milesma

回答

2

答案是stderr。我們可以重定向標準錯誤和標準輸出seperately看看,

$ java -version 2>stderr.txt 1>stdout.txt 
$ cat stderr.txt 
java version "1.8.0_66" 
Java(TM) SE Runtime Environment (build 1.8.0_66-b17) 
Java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode) 

您也可以重定向錯誤輸出到標準輸出,

$ java -version 2>&1 

這將允許你從標準輸出讀取它。

+0

正是我想知道的。 – milesma

+1

你知道它爲什麼寫入StdErr嗎?一定有一個原因。 – milesma

+0

我不確定,默認情況下命令行參數處理可能會在stderr上生成輸出(可能用於記錄)。請注意,'java -help'也在stderr上。 –