IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Lancer un executable en Java


Sujet :

Langage Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 101
    Par défaut Lancer un executable en Java
    Bonjour,

    j'aimerai lancer un exécutable en Java par l'intermédiaire d'une commande.
    Je dispose d'un script python de test, un simple print, et j'aimerai pouvoir l'exécuter en Java, sans passer par Jython, il me semble qu'il est possible de lancer n'importe quel exécutable grâce à une commande, quelqu'un serait-il comment lancer un simple fichier test.py (contenant juste un print) en java ?

    Merci à vous

  2. #2
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 467
    Par défaut
    Une recherche non ?

    Et puis au premier lien, tu tombes pas très loin !

    Bon courage !

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 101
    Par défaut
    Décidémment je ne devais pas avoir les bons mots clés, merci à vous je vais étudier ça !

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 101
    Par défaut
    Rebonjour,

    j'ai lu le toturiel en détail mais j'ai un petit souci, j'ai importé mon fichier python "ppp.pyw" (j'utilise docteur Python sous windows) mais mon code renvoie des erreurs, de plus il ne semble pas trouver le fichier alors que je l'ai importer dans mon projet :/

    Voici le code en question :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
     
     
     
    public class blc {
     
    	/**
             * @param args
             * @throws IOException 
             */
    	public static void main(String[] args) throws IOException {
    		// TODO Auto-generated method stub
     
     
    			 Runtime runtime = Runtime.getRuntime();
    		     final Process process = runtime.exec("ppp");
     
     
    		     new Thread() {
     
    		         public void run() {
    		             try {
    		                 BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
    		                 reader.close();
    		             } catch (IOException ioe) {
    		                 ioe.printStackTrace();
    		             }
    		         }
    		     }.start();
     
     
    		}
     
    	}
    j'obtiens le message d'erreur suivant:

    Exception in thread "main" java.io.IOException: Cannot run program "ppp": CreateProcess error=2, Le fichier spécifié est introuvable
    at java.lang.ProcessBuilder.start(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at blc.main(blc.java:19)
    Caused by: java.io.IOException: CreateProcess error=2, Le fichier spécifié est introuvable
    at java.lang.ProcessImpl.create(Native Method)
    at java.lang.ProcessImpl.<init>(Unknown Source)
    at java.lang.ProcessImpl.start(Unknown Source)
    ... 5 more
    Je ne comprends pas pourquoi il ne trouve pas le fichier, lorsque je fais l'import je dois le faire dans le "bin" ou le "src" de mon projet ? Pour information le fichier python contient un simple print...


    merci à vous

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 101
    Par défaut
    En fait je pense avoir réussis l'importation correctement, cependant j'ai toujours des erreurs :


    Exception in thread "main" java.io.IOException: Cannot run program "ppp.pyw": CreateProcess error=193, %1 n?est pas une application Win32 valid
    at java.lang.ProcessBuilder.start(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at blc.main(blc.java:19)
    Caused by: java.io.IOException: CreateProcess error=193, %1 n?est pas une application Win32 valid
    at java.lang.ProcessImpl.create(Native Method)
    at java.lang.ProcessImpl.<init>(Unknown Source)
    at java.lang.ProcessImpl.start(Unknown Source)
    ... 5 more
    Si jamais vous avez une idée je suis preneur

  6. #6
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 467
    Par défaut
    Salut,

    Cela fait longtemps que je ne fais plus de Java, et je fais encore moins de Python en fait

    Mais je pense savoir ce qui se passe :

    Déjà "ppp" n'est pas connu car le chemin d'accès ne doit pas être renseigné dans les variables d'environnement.

    Pour éviter ce genre d'erreur à foison : Toujours indiquer les chemins absolus complet quand tu appelles des programmes extérieurs

    Et il me semble que Python, c'est du script ? Donc il faudra appeler ton interpréteur avec ton fichier (toujours avec le chemin absolu) en paramètre

    Ainsi, cette commande devrait mieux fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Runtime runtime = Runtime.getRuntime();
    runtime.exec(new String[] { "x:\\chemin\vers\\ppp.exe", "x:\\chemin\vers\\ton\\fichier.py" } );

  7. #7
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Au passage ton fichier python doit exister sur le disque hein, l'OS va pas aller le chercher à l'intérieur de ton .jar

    Ensuite, sous windows, seuls des .exe et des .com peuvent être exécutés. Vous avez le choix entre faire un truc du style exécuter python.exe lefichier.py, ou jouer sur l'association des fichiers dans windows et utilise

    Desktop.getDesktop().open(fichierpython)

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 101
    Par défaut
    Merci pour vos réponses

    en fait je fais mes tests chez moi sous windows mais le but final est d'intégrer un script Python assez important (qui prend des arguments en entrée ect...) au sein d'une servlet, c'est pourquoi j'essais déjà d'intégrer un simple fichier.py, le java est assez nouveau pour moi, donc si je suis sous linux, je n'aurais pas d'executable (.exe), j'importe donc uniquement mon fichier.py avec le chemin d'accès au fichier comme vous me l'avez mentionné ?

  9. #9
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    tout dépend qu'est-ce que tu entends par "importe"

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 101
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    tout dépend qu'est-ce que tu entends par "importe"
    En effet moi même je m'y perds, pour que mon programme java trouve mon fichier Python il faut simplement que je lui spécifie le chemin où je dois l'importer (fichier -> importer) dans mon package ?

  11. #11
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    JE comprend pas ce que vous essayez de faire là :/

    Pour faire exécuter ce script par l'OS, il faudra inévitablement qu'il soit installé quelque part sur le disque. Pas dans votre jar, puisque l'os et python n'ont aucune idée de ce qu'est un jar

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 101
    Par défaut
    Je reconnais que mes explications ne sont pas très claires, en fait je suis sous Linux et je dispose d'un fichier "print.py'" situé sur mon bureau, il affiche simplement un message, Je voudrais pouvoir l'executer à l'aide de mon code Java, seulement je suppose qu'un fichier.py n'est pas reconnut comme executable sous linux ? je ne sais pas à quoi correspondent les .exe et .com sous linux.

    Voici mon code actuel:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     import java.io.BufferedReader;
     import java.io.IOException;
     import java.io.InputStreamReader;
     
     public class affichage {
     
         public static void main (String []args) throws IOException
         {
     
             final Process process = Runtime.getRuntime().exec("/nhome/file-srv/mtrellet/Desktop/print.py" );
     
             // Consommation de la sortie standard de l'application externe dans un Thread separe
             new Thread() {
                 public void run() {
                     try {
                         BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
                         String line = "";
                         try {
                             while((line = reader.readLine()) != null) {
                                 // Traitement du flux de sortie de l'application si besoin est
                                 System.out.println(line);
                             }
                         } finally {
                             reader.close();
                         }
                     } catch(IOException ioe) {
                         ioe.printStackTrace();
                     }
                 }
             }.start();
     
             // Consommation de la sortie d'erreur de l'application externe dans un Thread separe
             new Thread() {
                 public void run() {
                     try {
                         BufferedReader reader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
                         String line = "";
                         try {
                             while((line = reader.readLine()) != null) {
                                 // Traitement du flux d'erreur de l'application si besoin est
                                 System.out.println("erreur:"+ line);
     
                             }
                         } finally {
                             reader.close();
                         }
                     } catch(IOException ioe) {
                         ioe.printStackTrace();
                     }
                 }
             }.start();
     
     
     
         }
     }


    et les erreurs qui s'en suivent:



    Exception in thread "main" java.io.IOException: Cannot run program "/nhome/file-srv/mtrellet/Desktop/print.py": java.io.IOException: error=13, Permission denied
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:459)
    at java.lang.Runtime.exec(Runtime.java:593)
    at java.lang.Runtime.exec(Runtime.java:431)
    at java.lang.Runtime.exec(Runtime.java:328)
    at affichage.main(affichage.java:10)
    Caused by: java.io.IOException: java.io.IOException: error=13, Permission denied
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:148)
    at java.lang.ProcessImpl.start(ProcessImpl.java:65)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:452)
    ... 4 more


    le chemin du fichier est correct, je ne comprends pas la source des erreurs en fait

  13. #13
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    le fichier n'est pas exécutable. Sous linux, ce qui marque un exécutable, ce n'est pas son nom (comme sous windows où c'est .exe, .com, .bat) mais la présence ou non du bit exécutable:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    chmod u+x fichier.py   <- Pour le rendre exécutable par son propriétaire
    chmod g+x fichier.py   <- Pour le rendre exécutable par son groupe
    chmod o+x fichier.py   <- Pour le rendre exécutable par les autres
    chmod a+x fichier.py   <- Pour le rendre exécutable par tout le monde.
    Après il faut aussi que le fichier python soit bien rédigé

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 101
    Par défaut
    merci beaucoup ça semble fonctionner !

    Enfin presque

    Le programme java lit bien mon fichier, mais la console me retourne ceci:

    erreur:Warning: unknown mime-type for "Ceci est un test" -- using "application/*"
    erreur:Error: no such file "Ceci est un test"
    Le type n'est pas reconnu ? la lecture se fait puisque qu'il m'affiche bien le contenu de mon fichier python pourtant.

  15. #15
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    le fichier python démarre bien par

    ? (Le chemin est à adapter suivant l'os).

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 101
    Par défaut
    qu'entendez vous par le chemin est à adapter selon l'OS ? Car en rajoutant simplement cette ligne de code je retrouve des erreurs comme précedemment, comme vous le disiez du coup le chemin ne doit plus être correct.

    Ca doit ressembler a quelque chose comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #!/bin/python//nhome/file-srv/mtrellet/Desktop

  17. #17
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    je veux dire que je ne connais pas par coeur le chemin de python. Les script exécutable sous linux commencent toujour par #!/chemin/vers/interpreteur (dans ce cas ci python).

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 101
    Par défaut
    Merci à vous cela fonctionne.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lancer un executable depuis java
    Par riadhhwajdii dans le forum Général Java
    Réponses: 9
    Dernier message: 23/06/2011, 10h25
  2. lancer un executable à partir de java
    Par MariaDV dans le forum NetBeans
    Réponses: 1
    Dernier message: 17/03/2010, 14h29
  3. comment lancer un executable apartir de java
    Par nessing dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 27/03/2009, 12h01
  4. lancer un executable depuis une classe java
    Par k6971 dans le forum Langage
    Réponses: 4
    Dernier message: 21/05/2007, 22h46
  5. Problème pour lancer un executable java
    Par Niun dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 19/05/2006, 17h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo