Script linux executé à partir d'un code java qui marche pas
cs_ledawa
Messages postés6Date d'inscriptionmardi 2 mai 2006StatutMembreDernière intervention15 mars 2008
-
12 mars 2008 à 10:25
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023
-
12 mars 2008 à 11:55
Bonjour
j'ai un script Linux qui fonctionne parfaitement. j'ai donc écrit un code Java qui normalement doit me permettre d'executer le script mais quand je lance le code il marche normalement mais le script ne s'execut pas.
le message "merci " s'affiche mais le script ne s'execut pas.
pouvez vous me dire quoi faire s'il vous plait. je voudrais savoir aussi comment afficher la sortie d'une commande linux (executée à partir d'un code Java) à l'écran?'
merci
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 12 mars 2008 à 11:01
Salut,
avant toutes choses, il serait bien de préciser le shell à utiliser dans ta commande... java réagit très mal sur certaines distributions quand tu ne précises pas le shell à utiliser... de plus cette manip permet d'eviter de tester si le script est exécutable ou non...
Pour la manipulation des flux stderr, stdout et stdin il te faut utiliser l'objet java.lang.Process qui est retourné à l'appel de la méthode "exec".
voici un sample (jdk 1.5 mini) de ce qui est dit ci-dessus :
import java.io.File;
import java.io.PrintWriter;
import java.util.Scanner;
public class ShellExec {
public static void main(String[] args) throws Exception {
String scriptName = "/tmp/cat_proc.sh";
File f = new File(scriptName);
// création du script
makeScript(f);
//exécution du script
Process proc = Runtime.getRuntime().exec("/bin/bash " + scriptName);
//récupération de stdout
Scanner sc = new Scanner(proc.getInputStream());
//lecture
while(sc.hasNextLine())
System.out.println(sc.nextLine());
sc.close();
//supprime le script
f.delete();
}
/*
* bon tu pourrais le faire dirrectement dans la méthode
* "exec" et ne pas passer par un script mais ça ne répondrait
* pas directement à la question
*/
private static void makeScript(File f) throws Exception {
PrintWriter pw = new PrintWriter(f);
pw.println("#!/bin/bash");
pw.println();
pw.println("cat /proc/cpuinfo");
pw.println();
pw.flush();
pw.close();
}
}
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
cs_ledawa
Messages postés6Date d'inscriptionmardi 2 mai 2006StatutMembreDernière intervention15 mars 2008 12 mars 2008 à 11:32
j'ai executé ce code mais il m'envoie des messages du genre Exception in thread "main" java.lang.NoClassDefFoundError: While resolving class: Test2
voilà mon code
import java.io.File;
import java.io.PrintWriter;
import java.util.Scanner;
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 12 mars 2008 à 11:55
Salut,
"j'ai executé ce code mais il m'envoie des messages
du genre Exception in thread "main" java.lang.NoClassDefFoundError:
While resolving class: Test2"
> Le code tourne très bien sur les postes où je l'ai testé. (javac ShellExec.java && java ShellExec)
"de plus je comprends pas pourquoi tu crés un autre script (partie en gras)"
> Il faut bien exécuter un script pour l'exemple...
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."