Come eseguire comandi di sistema (Linux / BSD) utilizzando Java
-
16-09-2019 - |
Domanda
sto cercando di essere a buon mercato ed eseguire un comando di sistema locale (uname -a
) in Java. Sto cercando di afferrare l'uscita dal uname
e conservarla in una stringa. Qual è il modo migliore per fare questo? codice corrente:
public class lame {
public static void main(String args[]) {
try {
Process p = Runtime.getRuntime().exec("uname -a");
p.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line=reader.readLine();
while (line != null) {
System.out.println(line);
line = reader.readLine();
}
}
catch(IOException e1) {}
catch(InterruptedException e2) {}
System.out.println("finished.");
}
}
Soluzione
Il tuo modo non è lontano da quello che probabilmente farei:
Runtime r = Runtime.getRuntime();
Process p = r.exec("uname -a");
p.waitFor();
BufferedReader b = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = "";
while ((line = b.readLine()) != null) {
System.out.println(line);
}
b.close();
maniglia a seconda di quale delle eccezioni si cura di, ovviamente.
Altri suggerimenti
Questo è il modo migliore per farlo. Inoltre è possibile utilizzare la ProcessBuilder che ha un costruttore di argomenti variabili, così si potrebbe risparmiare una o due righe di codice
Quello che state facendo guarda bene. Se il comando è solo tornando una singola stringa, non è necessario il ciclo while, basta memorizzare il valore reader.readLine () in una variabile singola stringa.
Inoltre, probabilmente dovreste fare qualcosa con queste eccezioni, piuttosto che ingerirli.
So che questo è molto vecchio ma ancora ...
Leggendo l'articolo qui:
http: //www.javaworld .com / articolo / 2071275 / core-java / quando-runtime-exec --- won-t.html
E 'la mia comprensione che si deve prima leggere i flussi in uscita e di errore del vostro comando eseguito e solo allora waitFor
il valore di ritorno del processo.