Lancer un programme shell depuis java

Résolu
mahamah -  
 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
A voir également:

4 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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
mahamah
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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
mahamah
 
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