devwithjava
Messages postés21Date d'inscriptionmardi 14 août 2007StatutMembreDernière intervention23 septembre 2008
-
7 févr. 2008 à 10:36
essora
Messages postés2Date d'inscriptionmercredi 18 juillet 2007StatutMembreDernière intervention 4 avril 2008
-
4 avril 2008 à 19:59
Bonjour,
je serai heureux si quelqun peut me dire comment executer un binaire sous linux (script shell) a partir d'un code java
devwithjava
Messages postés21Date d'inscriptionmardi 14 août 2007StatutMembreDernière intervention23 septembre 2008 13 févr. 2008 à 08:32
salut ,
j ai trouvé la solution : en fait selon la valueur d'exit si ok c ad 0 alors on recuper la sortie via : p.getInputStream()
si non p.getErrorStream()
j ai testé et ca bien marché
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 7 févr. 2008 à 12:28
Salut:
try {
// Exécuter une commande sans arguments
String command = "ls";
Runtime.getRuntime().exec(command);
// Exécuter une commande avec des arguments
String[] commands = {"grep", "toto", "/tmp/file.txt"};
Runtime.getRuntime().exec(commands);
} catch (IOException e) {
e.printStackTrace();
}
devwithjava
Messages postés21Date d'inscriptionmardi 14 août 2007StatutMembreDernière intervention23 septembre 2008 7 févr. 2008 à 20:09
salut ,
je me demande comment avoir le message "command not found" celui du shell lorsque la commande lancer n'existe pas car en fait java leve une exceptio si s'etait le cas :Cannot run program "toto" (in directory "."): java.io.IOException: error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:459)
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 7 févr. 2008 à 21:00
Salut:
try {
// Exécuter une commande sans arguments
String command = "ls";
Runtime.getRuntime().exec(command);
// Exécuter une commande avec des arguments
String[] commands = {"grep", "toto", "/tmp/file.txt"};
Runtime.getRuntime().exec(commands);
} catch (IOException e) {
System.err.println("Comand no found ..."); }
Vous n’avez pas trouvé la réponse que vous recherchez ?
devwithjava
Messages postés21Date d'inscriptionmardi 14 août 2007StatutMembreDernière intervention23 septembre 2008 8 févr. 2008 à 08:32
mais justement je veux pas ecrire le message correspondant pour chaque cas c a d par exemple si je lance find avec inversion entre les argument path et l expression à traiter normalement l interpreteur shell retourne
find: paths must precede expression
Usage: find [path...] [expression
donc j'aime pas traiter et ecrire tous ces messages
il faut trouver un message pour recuperer le message d'error celui de l interpreteur shell
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 8 févr. 2008 à 09:19
Salut:
Je pense qu'il faut donc lire la sortie d'une commande.
try {
String[] command = {"calc"};
Process p = Runtime.getRuntime().exec(command);
p.waitFor();
if (p.exitValue() != 0) {
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
}
} catch (IOException e) {
} catch (InterruptedException e) {
}
devwithjava
Messages postés21Date d'inscriptionmardi 14 août 2007StatutMembreDernière intervention23 septembre 2008 8 févr. 2008 à 10:37
Salut,
pour afficher le resultat il faut que exit value egale à 0 mais l affiuchage va se faire seulement si la commande est bien executée
sinon on n aura pas le message d'erreur de la commande elle meme car il ya un exit et une exception levée juste apres l'instruction
Process p = Runtime.getRuntime().exec(command);
donc le probleme persiste encore
merci en tous cas et j espere qu on trouve une solution
try {
String[] command = {"calc"};
Process p = Runtime.getRuntime().exec(command);
p.waitFor();
if (p.exitValue() = = 0) {
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
}
} catch (IOException e) {
} catch (InterruptedException e) {
}
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 8 févr. 2008 à 11:51
Salut:
Le problème se pose si la commande spécifiée n'existe pas dans la variable PATH.
import java.util.*;
import java.io.*;
public class Test {
public static boolean fetchCommand(String filename) {
if (filename == null) {
throw new NullPointerException();
}
String path = System.getenv("path");
String[] pathTokens = path.split("" + File.pathSeparatorChar);
for (int index = 0; index < pathTokens.length; ++index) {
if (new File(pathTokens[index] + File.separatorChar + filename).exists()) {
return true;
}
}
return false;
}
public static void main(String[] args) {
System.out.println(fetchCommand("calc.exe"));
}
}
devwithjava
Messages postés21Date d'inscriptionmardi 14 août 2007StatutMembreDernière intervention23 septembre 2008 8 févr. 2008 à 14:34
salut
non c pas seulement si la cmd est introuvable, j ai deja parlé da la cmd find -name *.pdf /home/ qui normalement donne comme msg d'error
find: paths must precede expression
Usage: find [path...] [expression
j dois donc recuperé ce mesg
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 9 févr. 2008 à 12:42
Salut:
Utilises la méthode System.setErr() pour récupérer les messages d'erreur/
essora
Messages postés2Date d'inscriptionmercredi 18 juillet 2007StatutMembreDernière intervention 4 avril 2008 4 avril 2008 à 19:58
salut tous le monde appeler des binaire à partir du java Code,
simplement il s'agit d'utiliser le runtime en faite essayez du code de la forme
RunTime rt=new RunTime();
Process p=new Process("inserer le code de votre commande");
rt.run(p);
essayer de chercher encore plus avec le google il s'agit du runtime ce sur mais je ne me rappel plus d'une syntaxe
je eu ce probleme quelque temp déjà et ce résolu.