Lancer un programme shell depuis java
Résolu
mahamah
-
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
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:
- Shell java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Classic shell - Télécharger - Personnalisation
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
4 réponses
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 :
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...)
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
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
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
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 :
Il faudrait donc plutôt metre en premier argument la référence au terminal, genre :
String[] cmdArray = {"/bin/bash", "chmod", "777", "newnewessaiessai2.sh"};
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)
Des exemples d'utilisations de cette classe sont sur la documentation officielle :
Managing Metadata (File and File Store Attributes)