2015-12-15 12 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) { 
} 

を以下のよ:

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) 

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

私はその結果を得ることができますただし、結果は返されますstdErrから、私はstdOutから戻ってくるはずです。

stdErrから文字列を受け取るのは意味がありますか?

+1

なぜですか?それはどこにstdoutに行くと言うのですか?あなたの期待の基礎は何ですか? – EJP

+0

私はstdoutまたはstderrをJavaで使用する変換についてはわかりません。私の根拠はランニング中です。エラーは起こっていないようですので、それを標準出力に行くことは非常に直感的です。 – milesma

答えて

2

答えは標準エラーです。私たちは、

$ 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) 

あなたはまた、stdoutにあなたはSTDOUTからそれを読み取ることができるようになる

$ java -version 2>&1 

を標準エラー出力をリダイレクトすることができ、別々に標準エラー出力と標準出力をリダイレクトして見ることができます。

+0

まさに私が知りたいことです。 – milesma

+1

なぜそれがStdErrに書き込まれるのか分かりますか?理由があるはずです。 – milesma

+0

私は確かではありませんが、おそらくコマンドライン引数の処理では、デフォルトで(おそらくロギングのために)stderrに出力が生成されるでしょう。 'java -help'もstderrにあることに注意してください。 –

関連する問題