[Java] Process marche sous windows, pas sous linux

Process marche sous windows, pas sous linux [Java] - Java - Programmation

Marsh Posté le 12-01-2006 à 21:00:48    

Bonjour,
 
J'utilise un Process pour lancer un script perl.
J'ai testé avec succès cette partie de code sous windows.
 

Code :
  1. try{
  2. String commands = new String("perl + repertoireCourant.getAbsolutePath() + File.separator + "fichiers" + File.separator + "script.pl" + " " + "\"" + f + "\" " +
  3. classe.getMethode1() + " " +
  4. classe.getMethode2() + " " +
  5. classe.getMethode3() + " " +
  6. classe.getMethode4()
  7. );
  8. Process process = Runtime.getRuntime().exec(commands);
  9. //  Attendre la fin
  10. process.waitFor();
  11. BufferedReader r = new BufferedReader(new InputStreamReader(process.getInputStream()));
  12.                
  13. System.out.println("commande = " + commands);
  14. String resultat = new String(r.readLine());
  15. do {
  16.       textAreaConcole.append(" $ " + resultat + "\n" );
  17.       resultat = r.readLine();
  18. } while (resultat != null);
  19.                
  20. }
  21. catch (IOException e) {
  22.         textAreaConcole.append("Erreur lors du lancement\n" );
  23.         e.printStackTrace();
  24. }


 
seulement, sous linux, le script ne se lance pas. Pourtant quand je tape la commande passé en paramétre, elle fonctionne.
Ce script créer un fichier. Je me demande si ce n'est pas un problème de droit en écriture.
J'ai cherché longtemps et je ne trouve pas d'explications.
 
Merci d'avance pour vos réponses.


Message édité par hugo25 le 12-01-2006 à 21:05:38
Reply

Marsh Posté le 12-01-2006 à 21:00:48   

Reply

Marsh Posté le 12-01-2006 à 21:24:46    

ton appli java est executée par le meme user que toi quand tu essaies de lancer le script à la main?


Message édité par the real moins moins le 12-01-2006 à 21:25:16

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 12-01-2006 à 21:28:08    

Je lance le projet depuis eclipse ou en ligne de commande, logué en user. -> marche pas
Je lance aussi le script perl dans une console en user. -> marche

Reply

Marsh Posté le 12-01-2006 à 21:45:55    

et "marche pas", ça veut dire quoi, à vrai dire ?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 12-01-2006 à 22:04:19    

Il n'y a pas d'erreur d'execution, et ca ne rentre pas dans le catch.
La commande ne fait rien : pas de temps d'execution ni de fichiers produit.
J'ai affiché le retour avec exitValue() qui est égale à 2 !?


Message édité par hugo25 le 12-01-2006 à 22:05:02
Reply

Marsh Posté le 12-01-2006 à 22:09:21    

lire la javadoc ça aide, hein, de temps en temps .... [:kiki]
http://java.sun.com/j2se/1.4.2/doc [...] orStream()


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 12-01-2006 à 22:11:33    

Je sais que 0 indique une terminaise normal. Mais je n'ai pas trouvé ce que 2 signifie et comment résoudre ce problème.
J'ai déjà essayer sans  

Code :
  1. BufferedReader r = new BufferedReader(new InputStreamReader(process.getInputStream()));
  2. System.out.println("commande = " + commands);
  3. String resultat = new String(r.readLine());
  4. do {
  5.      textAreaConcole.append(" $ " + resultat + "\n" );   
  6.      resultat = r.readLine();
  7. } while (resultat != null);


 et j'ai aucun changements. Je vais revérifier.


Message édité par hugo25 le 12-01-2006 à 22:15:20
Reply

Marsh Posté le 13-01-2006 à 00:24:15    

En fesant juste :

Code :
  1. try{
  2. String commands = new String("perl + repertoireCourant.getAbsolutePath() + File.separator + "fichiers" + File.separator + "script.pl" + " " + "\"" + stringS + "\" " +
  3. "\"\" " +
  4. "\""  + classe.getMethode1() + "\" " +
  5. "\""  + classe.getMethode2() + "\" " +
  6. "\""  + classe.getMethode3() + "\" " +
  7. "\""  + classe.getMethode4() + "\""
  8. );
  9. Process process = Runtime.getRuntime().exec(commands);
  10. //  Attendre la fin
  11. process.waitFor();
  12. System.out.println("commande = " + commands);
  13. }catch (IOException e) {
  14.         textAreaConcole.append("Erreur lors du lancement\n" );
  15.         e.printStackTrace();
  16. }


 
ca ne marche pas. J'ai toujours un code d'erreur 2 en retour, et aucun fichier créer.


Message édité par hugo25 le 13-01-2006 à 00:55:55
Reply

Marsh Posté le 13-01-2006 à 00:39:39    

tu t'es donc vraiment arreté à la moitié de mon post, et tu t'es pas dit que ptet y'avait effectivement un truc qui t'aiderait dans la javadoc ? (truc qui, donc, se trouve dans la deuxieme moitié de mon post que tu as zappé...)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 13-01-2006 à 00:59:46    

Oui je viend d'essayer getErrorStream.
 
Quand je fais  
 

Code :
  1. String commands = new String("perl + repertoireCourant.getAbsolutePath() + File.separator + "fichiers" + File.separator + "fichiers"" + " " + "\"" + stringS + "\" " +
  2. "\"\" " +
  3. "\""  + classe.getMethode1() + "\" " +
  4. "\""  + classe.getMethode2() + "\" " +
  5. "\""  + classe.getMethode3() + "\" " +
  6. "\""  + classe.getMethode4() + "\""
  7. );


 
J'obtiens la commande  
perl rep/fichiers/perl.pl "adf" "" "45" "456" "43" "416"
qui marche dans le terminal.
Mais quand je la lance dans Process, le parametre "" est mal interprete par le script perl ce qui le fait s'arreter (die). Je ne sais pas quoi faire pour que ce parametre soit passé correctement.
Le script perl vérifie que :

Code :
  1. if($2eme_param eq "" )


Lancer en ligne de commande, c'est verifier,
Lancer depuis Process, c'est pas vérifier... !?


Message édité par hugo25 le 13-01-2006 à 01:03:12
Reply

Marsh Posté le 13-01-2006 à 00:59:46   

Reply

Marsh Posté le 13-01-2006 à 01:03:32    

(euh, new String() ça sert à rien, hein)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 13-01-2006 à 01:06:09    

à part ça, je sais pas trop - essaye avec des ' au lieu des " ?
 


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 13-01-2006 à 11:41:04    

J'ai essayer avec des ', ca ne change rien.
J'ai ajouter un print :

Code :
  1. print "2eme_param=$2eme_param\n";
  2. if($2eme_param eq "" )


 
En ligne de commande j'obtient pour résultat :
2eme_param=
fichier created.
Ok.
 
Dans le proccess j'obtient :
Error: Unable to read ""
2eme_param=""
 
Comment faire pour passer un argument vide ?


Message édité par hugo25 le 13-01-2006 à 11:41:53
Reply

Marsh Posté le 13-01-2006 à 12:42:33    

mais qu'est-ce que c'est que ce script qui attend un argument vide et n'accepte rien d'autre ? [:rofl]
vire l'argument [:mlc]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 13-01-2006 à 14:50:00    

des fois, l'argument n'est pas vide, et ce n'est pas moi qui ai fait ce script.

Reply

Marsh Posté le 13-01-2006 à 18:34:25    

ben qd il pas vide il die() ton script non ?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed