1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2017
    Messages : 2
    Points : 2
    Points
    2

    Par défaut Appeler un script AWK a partir d'un programme JAVA

    Bonjour à tous,

    Je viens de commencer à utiliser LINUX et JAVA, et je doit ajouter à un gros programme une fonction qui appel un script AWK (pour éplucher des logs que le programme crache)

    J'ai réussi (avec mes 3 jours d'expérience sur JAVA) à mettre en place un JButton et sa fonction associée sensée appelée le script awk sauf que lorsque le bouton est cliqué, la fonction est bien appelée mais pas le script.

    voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     public void showOverflowStatus() {
    	try{
    	    String chemin = "/chemin/absolu/correct/";
    	    String[] command = {"chmod", chemin + "monScript.awk", chemin + "leLog.log"};
    	    ProcessBuilder pb = new ProcessBuilder(command);
    	    Process p = pb.start();
    	    int exitStatus = p.waitFor();
    	} catch (InterruptedException e) {
    	    e.printStackTrace();
    	} catch (Exception e) {
    	    e.printStackTrace();
    	}
        }
    j'avais un problème de permission au préalable (d'où le "chmod").

    j'ai également essayer de passer par un Runtime.getRuntime().exec() sans succès....

    je me suis même demander si il n'était pas plus simple d'appeler un script shell (qui n'as pas besoin d'arguments) qui lui appelerais le script awk.

    merci de votre aide

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java/Eclipse RCP
    Inscrit en
    septembre 2009
    Messages
    10 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java/Eclipse RCP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2009
    Messages : 10 288
    Points : 24 713
    Points
    24 713
    Billets dans le blog
    2

    Par défaut

    Salut,

    Citation Envoyé par Jean Micro Voir le message
    j'ai également essayer de passer par un Runtime.getRuntime().exec() sans succès....
    De toute façon, c'est mieux d'utiliser ProcessBuilder.


    Citation Envoyé par Jean Micro Voir le message
    je me suis même demander si il n'était pas plus simple d'appeler un script shell (qui n'as pas besoin d'arguments) qui lui appelerais le script awk.
    C'est envisageable, en lançant le script avec sh.exe (on ne peut appeler que des exécutables avec ProcessBuilder).

    Déjà, là tu lances chmod. Je ne suis pas très familié avec linux, mais de mémoire ça sert à modifier les droits d'exécution d'un fichier. Le truc .awk, c'est un exécutable, ou un script ?

    Si c'est un script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String[] command = {"sh"/* où peut-être sh.exe, je ne sais plus*/, chemin + "monScript.awk", chemin + "leLog.log"};
    Si c'est un exécutable, et que tu lui donnée les droits avec chmod
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String[] command = {chemin + "monScript.awk", chemin + "leLog.log"};
    Ensuite, il faut que tu fasses attention aux flux. Flux d'entrée si ton awk est interactif, flux de sortie pour avoir la trace d'exécution, et, en particulier, les erreurs qu'il pourrait y avoir. Regarde ce blog à ce sujet.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2017
    Messages : 2
    Points : 2
    Points
    2

    Par défaut

    Citation Envoyé par joel.drigo Voir le message
    on ne peut appeler que des exécutables avec ProcessBuilder
    Voila une information que je n'avais pas

    Citation Envoyé par joel.drigo Voir le message
    Le truc .awk, c'est un exécutable, ou un script ?
    C'était un script mais maintenant je l'ai rendu exécutable en lancant "chmod u+x monScript.awk" dans le terminal (enfin je crois).

    Citation Envoyé par joel.drigo Voir le message
    Ensuite, il faut que tu fasses attention aux flux. Flux d'entrée si ton awk est interactif, flux de sortie pour avoir la trace d'exécution
    Heuuuuu..... je crois qu'éventuellement je voudrais qu'il soit interactif mais je n'ai pas encore le niveau en java pour ca.... et je vais me renseigner sur les flux de sortie

    Après prise en compte de tes conseil j'ai modifier mon code et tester directement avec le script awk ainsi qu'avec un script shell entre les deux et je n'ai toujours pas de résultats...

    EDIT: En fait, cela fontionne avec un script shell entre les deux, c'est juste que le log sur lequel je testais avec un problème et mon script awk tentais une division par zéro. Mais la redirection des erreurs avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     pb.redirectError(ProcessBuilder.Redirect.INHERIT);
    m'as permis de voir l'erreur et de la corriger, merci beaucoup !

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

Discussions similaires

  1. [WM16]Appel d'une procédure WM à partir d'un code java
    Par courdi95 dans le forum Windev Mobile
    Réponses: 1
    Dernier message: 21/12/2011, 07h35
  2. Appel d'un service cobol à partir d'un programme java
    Par thaundeadboss dans le forum Général Java
    Réponses: 0
    Dernier message: 26/09/2010, 18h35
  3. Réponses: 5
    Dernier message: 06/11/2007, 21h44
  4. Réponses: 4
    Dernier message: 24/04/2007, 18h05
  5. Lancer un jar à partir d'un programme java
    Par bart64 dans le forum Langage
    Réponses: 7
    Dernier message: 09/06/2006, 10h29

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