Obtenir une sortie de commande cmd à partir du code java
J'ai un programme où j'ai été en mesure d'exécuter avec succès les commandes cmd à partir de mon code, mais je veux être en mesure d'obtenir la sortie de la commande cmd. Comment puis-je le faire?
Jusqu'à présent, mon code est:
Second.java:
public class Second {
public static void main(String[] args) {
System.out.println("Hello world from Second.java");
}
}
et Main.java
public class Main {
public static void main(String[] args) {
String filename = args[1].substring(0, args[1].length() - 5);
String cmd1 = "javac " + args[1];
String cmd2 = "java " + filename;
Runtime r = Runtime.getRuntime();
Process p = r.exec(cmd1); //i can verify this by being able to see Second.class and running it successfully
p = r.exec(cmd2); //i need to see this output to see if
System.out.println("Done");
}
}
Que je puisse vérifier que la première commande est de travailler avec succès par la vérification de Second.class mais que faire si cette classe a généré une erreur, comment vais-je être en mesure de voir cette erreur?
OriginalL'auteur hakuna matata | 2013-12-27
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin pour l'OutputStream (InputStream) de votre Processus et vous devez utiliser un ProcessBuilder)... comme
Est-ce vraiment vrai? Pour quelque chose que vous pouvez écrire comme
$output = `command`;
en PHP, Java a besoin de 20 lignes de code, un processus générateur, un tampon lecteur et qu'est-ce-pas? Cette abstraction n'est même pas l'histoire complète -- ce code fuites de ressources, parce que le flux n'a jamais fermé...Est est vraiment vrai? Dans bash vous pouvez écrire
output=$(command)
; les différentes langues sont différentes (par exemple, Java n'est pas un script langue). En outre, les ressources sont fermés dans l'exemple ci-dessus, lorsquemain
sorties.Si Java est un langage de script ou non n'est pas pertinent. Il aurait été possible d'envelopper l'ensemble de cette fonctionnalité (appel à un système de commande et de faire sa sortie) dans une méthode, sans forcer l'utilisateur à traiter avec les processus, les tamponnée lecteurs, des boucles, IO exceptions et tout ce que passe-partout. Concernant les ressources, le système d'exploitation prend soin de libérer les descripteurs de fichiers de fermer les applications, pas de Java. Ce code est généralement utilisé dans les applications les plus complexes, et pas seulement une méthode main () -- et si elle est en cours d'exécution pour un temps plus long, libérer des ressources système correctement est important.
Et comment feriez-vous pour obtenir la sortie d'un programme en C ou C++? L'utilisateur doit composer avec des processus (
popen(3)
), (tampon) lecteurs (fscanf
), les boucles, IO exceptions et encore plus passe-partout. Avec Scala, vous pouvez créer un custom DSL pour habiller cette fonctionnalité comme un script langue; mais ce Java.OriginalL'auteur Elliott Frisch
Un exemple général pour obtenir le retour d'une commande est:
OriginalL'auteur Paul Lo
regardez ici: L'extraction d'un processus de sortie de code dans le cas de ThreadInterrupted
Vous avez besoin pour obtenir le code de retour... vous devez l'attendre.
OriginalL'auteur T McKeown