2015-12-15 7 views
5

Sto scrivendo il codice per utilizzare l'API Win32 per rilevare la versione di java. Per esempio.riga di comando "java -version" invierà il risultato a stdOut o stdErr?

Fondamentalmente, io sto seguendo 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) { 
} 

Questo è il codice pseudo client:

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

posso ottenere il risultato come:

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) 

Tuttavia, il risultato viene inviato indietro da stdErr, mentre dovrei tornare da stdOut.

Ha senso ricevere la stringa da stdErr?

+1

Perché? Dove dice che va in stdout? Qual è la base per le tue aspettative? – EJP

+0

Non conosco la conversione dell'uso di stdout o stderr da parte di Java. La mia base è durante la corsa, lì "sembra" non è successo nessun errore, quindi è molto intuitivo aspettarsi che passi allo stdout. – milesma

risposta

2

La risposta è stderr. Siamo in grado di reindirizzare stderr e stdout separatamente e vedere,

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

È inoltre possibile reindirizzare stderr su stdout,

$ java -version 2>&1 

che permetterebbe di leggere da stdout.

+0

Esattamente quello che voglio sapere. – milesma

+1

sai perché è stato scritto su StdErr? Ci deve essere una ragione. – milesma

+0

Non sono sicuro, forse l'elaborazione degli argomenti della riga di comando produce output su stderr di default (forse per la registrazione). Si noti che 'java -help' è anche su stderr. –

Problemi correlati