Appeler des binaire sous linux from code java

Résolu
devwithjava Messages postés 21 Date d'inscription mardi 14 août 2007 Statut Membre Dernière intervention 23 septembre 2008 - 7 févr. 2008 à 10:36
essora Messages postés 2 Date d'inscription mercredi 18 juillet 2007 Statut Membre Derniè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

Merci

12 réponses

devwithjava Messages postés 21 Date d'inscription mardi 14 août 2007 Statut Membre Dernière intervention 23 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é

merci pour tous et pour toi Ombitious developper
3
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
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();
}
0
devwithjava Messages postés 21 Date d'inscription mardi 14 août 2007 Statut Membre Dernière intervention 23 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)

je signale que la commande toto est indefinie

merci d'avance
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
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 ...");
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
devwithjava Messages postés 21 Date d'inscription mardi 14 août 2007 Statut Membre Dernière intervention 23 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

merci 
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
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) {
}
0
devwithjava Messages postés 21 Date d'inscription mardi 14 août 2007 Statut Membre Dernière intervention 23 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) {
}
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
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"));
    }
}
0
devwithjava Messages postés 21 Date d'inscription mardi 14 août 2007 Statut Membre Dernière intervention 23 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
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
9 févr. 2008 à 12:42
Salut:

Utilises la méthode System.setErr() pour récupérer les messages d'erreur/
0
essora Messages postés 2 Date d'inscription mercredi 18 juillet 2007 Statut Membre Derniè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. 
0
essora Messages postés 2 Date d'inscription mercredi 18 juillet 2007 Statut Membre Dernière intervention 4 avril 2008
4 avril 2008 à 19:59
c'est rien


bonne continuation
0
Rejoignez-nous