Lancer un programme shell depuis java

Résolu/Fermé
mahamah - 27 juin 2013 à 18:36
 mahamah - 28 juin 2013 à 12:02
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
A voir également:

4 réponses

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
Modifié par KX le 27/06/2013 à 18:57
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
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
1
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
Modifié par KX le 28/06/2013 à 11:07
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"};
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
28 juin 2013 à 11:23
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)
1
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
0