Appeler des binaire sous linux from code java

[Résolu]
Signaler
Messages postés
21
Date d'inscription
mardi 14 août 2007
Statut
Membre
Dernière intervention
23 septembre 2008
-
Messages postés
2
Date d'inscription
mercredi 18 juillet 2007
Statut
Membre
Dernière intervention
4 avril 2008
-
Bonjour,
je serai heureux si quelqun peut me dire comment executer un binaire sous linux (script shell) a partir d'un code java

Merci
A voir également:

12 réponses

Messages postés
21
Date d'inscription
mardi 14 août 2007
Statut
Membre
Dernière intervention
23 septembre 2008

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
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
36
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();
}
Messages postés
21
Date d'inscription
mardi 14 août 2007
Statut
Membre
Dernière intervention
23 septembre 2008

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
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
36
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 ...");
}
Messages postés
21
Date d'inscription
mardi 14 août 2007
Statut
Membre
Dernière intervention
23 septembre 2008

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 
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
36
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) {
}
Messages postés
21
Date d'inscription
mardi 14 août 2007
Statut
Membre
Dernière intervention
23 septembre 2008

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) {
}
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
36
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"));
    }
}
Messages postés
21
Date d'inscription
mardi 14 août 2007
Statut
Membre
Dernière intervention
23 septembre 2008

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
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
36
Salut:

Utilises la méthode System.setErr() pour récupérer les messages d'erreur/
Messages postés
2
Date d'inscription
mercredi 18 juillet 2007
Statut
Membre
Dernière intervention
4 avril 2008

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. 
Messages postés
2
Date d'inscription
mercredi 18 juillet 2007
Statut
Membre
Dernière intervention
4 avril 2008

c'est rien


bonne continuation