Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1672 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [Java] Process marche sous windows, pas sous linux

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Java] Process marche sous windows, pas sous linux

n°1282491
hugo25
Posté le 12-01-2006 à 21:00:48  profilanswer
 

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
mood
Publicité
Posté le 12-01-2006 à 21:00:48  profilanswer
 

n°1282514
the real m​oins moins
Posté le 12-01-2006 à 21:24:46  profilanswer
 

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 ?
n°1282518
hugo25
Posté le 12-01-2006 à 21:28:08  profilanswer
 

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

n°1282527
the real m​oins moins
Posté le 12-01-2006 à 21:45:55  profilanswer
 

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


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1282540
hugo25
Posté le 12-01-2006 à 22:04:19  profilanswer
 

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
n°1282544
the real m​oins moins
Posté le 12-01-2006 à 22:09:21  profilanswer
 

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 ?
n°1282547
hugo25
Posté le 12-01-2006 à 22:11:33  profilanswer
 

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
n°1282645
hugo25
Posté le 13-01-2006 à 00:24:15  profilanswer
 

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
n°1282647
the real m​oins moins
Posté le 13-01-2006 à 00:39:39  profilanswer
 

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 ?
n°1282651
hugo25
Posté le 13-01-2006 à 00:59:46  profilanswer
 

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
mood
Publicité
Posté le 13-01-2006 à 00:59:46  profilanswer
 

n°1282652
the real m​oins moins
Posté le 13-01-2006 à 01:03:32  profilanswer
 

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


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1282653
the real m​oins moins
Posté le 13-01-2006 à 01:06:09  profilanswer
 

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


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1282805
hugo25
Posté le 13-01-2006 à 11:41:04  profilanswer
 

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
n°1282882
the real m​oins moins
Posté le 13-01-2006 à 12:42:33  profilanswer
 

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 ?
n°1283001
hugo25
Posté le 13-01-2006 à 14:50:00  profilanswer
 

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

n°1283225
the real m​oins moins
Posté le 13-01-2006 à 18:34:25  profilanswer
 

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


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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [Java] Process marche sous windows, pas sous linux

 

Sujets relatifs
Java: Probleme de Cast[Java 1.5] Process : afficher le flux de sortie
[Java] Extraire informations d'un cheminQuelle est l'interet d'étudier JAVA ou C++ ???
Application JAVA retourne une FATAL EXCEPTIONComment exécuter une commande DOS à partir d'un code JAVA
[PHP5 en ligne de commande]Comment convertir le é Dos en é Windows?Java, Corba et "callback"
select * from table where nom = ' "+string+"' n marche pas en datagrid 
Plus de sujets relatifs à : [Java] Process marche sous windows, pas sous linux


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR