2015-12-15 9 views
5

Bir java'nın sürümünü algılamak için Win32 API kullanmak için kod yazıyorum. Örneğin.komut satırı "java -version" stdOut veya stdErr sonucunu gönderecek?

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) 

: Ben sonucu alabilirsiniz

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

:

Temelde, 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) { 
} 

Bu sözde istemci kodu olduğunu takip ediyorum Ancak sonuç geri gönderildi stdOut'tan dönerken stdOut'tan dönmeliyim.

Dizeyi stdErr'den almak mantıklı mı?

+1

Neden? Stdout'a nereye gider? Beklentinizin temeli nedir? – EJP

+0

Java tarafından stdout veya stderr kullanmanın dönüşümünü bilmiyorum. Benim temelim koşarken, orada "görünüyor" diye bir hata oldu, bu yüzden stdout'a gitmesini beklemek çok sezgisel. – milesma

cevap

2

Yanıt stderr. Biz

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

Ayrıca, Stdout'a sen Stdout'a onu okumak için izin verecek

$ java -version 2>&1 

stderr'yi yönlendirebilirsiniz, ayrı ayrı stderr'yi ve çıkışı yönlendirmek ve görebilirsiniz.

+0

Tam olarak bilmek istediğim şey. – milesma

+1

StdErr'e neden yazıldığını biliyor musunuz? Bir nedeni olmalı. – milesma

+0

Emin değilim, belki de komut satırı argümanı işlemi varsayılan olarak stderr'de çıktı üretir (belki de günlüğe kaydetme için). "Java -help" in de stderr olduğunu unutmayın. –