Lancer un programme shell depuis java

[Résolu/Fermé]
Signaler
-
 mahamah -
Bonjour,

je dois lancer l'outil sipp.Donc ,au début j'ai écrit un script shell qui me permet de lancer l'outil sipp:
#!/bin/sh
./sipp -sf /usr/bin/sipp.svn/uacuacuac1.xml -l 100 -m 100 -trace_stat -trace_err -trace_msg 127.0.0.1
Aprés,j'ai essayé d'éxcuter se script shell depuis un code java:


public class sippclient extends Thread {
public void run(){
try {

Process proc = Runtime.getRuntime().exec("chmod 777 newnewessaiessai2.sh");

// Process proc1 = Runtime.getRuntime().exec(args1);
Process proc1 = Runtime.getRuntime().exec("bash /usr/src/sipp.svn/newnewessaiessai2.sh");

System.out.println("Here is the standard output of the command:\n");
BufferedReader read = new BufferedReader(new InputStreamReader(
proc1.getInputStream()));
BufferedReader stdError = new BufferedReader(new
InputStreamReader(proc1.getErrorStream()));

} catch (IOException ex) {
Logger.getLogger(wireshark.class.getName()).log(Level.SEVERE, null, ex);
}
}







public static void main(String args[]) throws InterruptedException {
sippclient thread=new sippclient ();
thread.start();

}
}


Mais , rien ne s'affiche uniquement run:
Here is the standard output of the command(c'est à dire sipp n'était pas lancé)

est-ce que vous pouvez m'aider.SVP c'est urgent.
Merci d'avnace

4 réponses

Messages postés
16400
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2021
2 879
L'utilisation de la commande exec nécessite de passer les différents paramètres dans un tableau, pas dans une grande chaîne de caratères comme tu l'as fait :

String[] cmdArray = {"chmod","777","newnewessaiessai2.sh"};
Process proc = Runtime.getRuntime().exec(cmdArray);

Ensuite, mettre les stream dans des buffer c'est bien (quoique...) mais les lire c'est quand même mieux ! (sans oublier de les fermer aussi...)

Scanner out = new Scanner(proc.getInputStream());
while (out.hasNextLine())
    System.out.println(out.nextLine());
out.close();

Scanner err = new Scanner(proc.getErrorStream());
while (err.hasNextLine())
    System.err.println(err.nextLine());
err.close();
La confiance n'exclut pas le contrôle
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 42674 internautes nous ont dit merci ce mois-ci

Bonjour ,
je veux te remercier pour votre aide.
Mais ,aprés l'incertion d ton code ,j'ai eu l'erreur suivante:
Error opening terminal: unknown


Puvez -vous m'aider?
merci d'avance
Messages postés
16400
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2021
2 879
Je ne connais pas trop Linux, mais "chmod" n'est pas un programme, ce n'est qu'une fonctionnalité du terminal, il fait donc déjà parti des paramètres de la commande, et ne devrait pas être utilisé comme commande (ou un truc comme ça)

Il faudrait donc plutôt metre en premier argument la référence au terminal, genre :
String[] cmdArray = {"/bin/bash", "chmod", "777", "newnewessaiessai2.sh"};
Messages postés
16400
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2021
2 879
Remarque : pour cette opération en particulier (la gestion des droits sous Linux), il n'est pas nécessaire de passer par un exec, Java peut le faire directement, il faut regarder du côté de la classe java.nio.file.Files et en particulier la méthode setPosixFilePermissions(Path path, Set<PosixFilePermission> perms)

Des exemples d'utilisations de cette classe sont sur la documentation officielle :
Managing Metadata (File and File Store Attributes)
Bonjour,
J'ai enlevé cette ligne :
Process proc = Runtime.getRuntime().exec("chmod 777 newnewessaiessai2.sh")
J'ai mis directement:
String[] cmdArray = {bash","/usr/src/sipp.svn/newnewessaiessai2.sh"};
Process proc = Runtime.getRuntime().exec(cmdArray);
et ça marche .merci beaucoup pour votre aide