Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

Attention, une faille de sécurité dans bash a récemment été rapportée, il est recommandé de mettre à jour son système (plus de détails) *** mise à jour 12/10/2014 ***

#1 Le 07/01/2013, à 18:18

lynda12

lancer Treetagger depuis un programme java

J'ai besoin d'écrire un shell pour exécuter une commande qui traite un fichier en entrée et me sort le résultat dans un autre fichier

Voici la commande telle que je l’exécute dans un terminal

sudo perl ./treetagger/cmd/tokenize.pl    fichier_a_tagger |     ./treetagger/bin/tree-tagger         ./treetagger/lib/english.par -lemma -token -sgml   fichier_resultat

Je dois exécuter cette commande dans un programme java, mais d’après mes recherches, il faut écrire un script contenant cette commande et l'exécuter ensuite avec Runtime.

Je dois dire que je suis novice en linux et j'ai des contraintes d’exécuter mon application dans cet environnement. Je me retrouve dans la difficulté d'écrire ce shell  surtout qu'il y a des paramètres en entrée fichier_a_tagger et fichier_resultat. 

Merci d'avance  pr votre aide

Hors ligne

#2 Le 08/01/2013, à 12:32

claudius01

Re : lancer Treetagger depuis un programme java

Bonjour,

S'il faut encapsuler ladite ligne de commande dans un script, sauf erreur de ma part, le code suivant devrait répondre au problème :

#!/bin/bash

if [ $# -ge 3 ]; then
  echo $1 | sudo -S perl ./treetagger/cmd/tokenize.pl $2 | ./treetagger/bin/tree-tagger ./treetagger/lib/english.par -lemma -token -sgml $3
else
  echo "Usage: $0 <password> <fichier_a_tagger> <fichier_resultat>"
  exit 2
fi

exit 0

Cordialement, A+
--
Claudius

Hors ligne

#3 Le 08/01/2013, à 16:28

lynda12

Re : lancer Treetagger depuis un programme java

merci pr votre réponse,

j'ai essayé d'exécuter le script mais ça ne marche pas, ni quand je le lance depuis mon prgramme ni via un terminal  sad

Hors ligne

#4 Le 08/01/2013, à 16:42

claudius01

Re : lancer Treetagger depuis un programme java

Re lynda12,

On va tenter de savoir pourquoi cela ne fonctionne pas déjà via un terminal :
- Le fichier script a t-il été mis avec les droits d'exécution (chmod +x <nom_du_script>) ?
- Si oui, comment est-il lancé (copie de la ligne de commande)
- Copie de la sortie écran du terminal avec l'erreur éventuelle.


Merci pour ta contribution ;-)
--
Claudius

Dernière modification par claudius01 (Le 08/01/2013, à 16:43)

Hors ligne

#5 Le 08/01/2013, à 17:05

lynda12

Re : lancer Treetagger depuis un programme java

C'est moi qui vous remercie pour votre  aide.

En fait quand je fais un
"chmod +x  mon_script "

j'ai le message suivait   : impossible d'accéder à mon_script aucun fichier ou dossier de ce type!

pourtant je me suis bien placée dans le répertoire où il est situé!

Hors ligne

#6 Le 08/01/2013, à 17:33

claudius01

Re : lancer Treetagger depuis un programme java

Appliquant les principes la machine a toujours raison et étant comme St. Thomas..., peux-tu lancer les 3 commandes suivantes en une seule ligne et dans le répertoire où se trouve ce script mon_script :

pwd ; ls -l mon_script ; cat mon_script

Cordialement, A+
--
Claudius

Hors ligne

#7 Le 08/01/2013, à 18:00

lynda12

Re : lancer Treetagger depuis un programme java

Il m'affiche tout simplement le script lui même.

Si j'ai bien compris (je vous rappelle que je suis novice smile  )  les $i sont les paramètres (le password, le fichier à étiqueter et le fichier résultat) . mais je n'ai pas compris comment les donner au script.
Pour être plus précise, voici ma fonction en java sous windows :

public static void appel_treetagger (String path, String pathResult) {
     String cmd = new String("cmd /c C:\\TreeTagger\\bin\\tag-english.bat  C:\\workspace\\My_Work\\"+path + " C:\\workspace\\My_Work\\" + pathResult);
     Runtime r = Runtime.getRuntime();
     try {
          Process p = r.exec(cmd);
          
          try {
            p.waitFor();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        } catch (IOException e) {
            e.printStackTrace();
        }
   }




je cherche l'équivalent de ça en linux, j'ai la syntaxe du treetagger (mon premier post) mais comment l'appeler à travers un shell , je bloque !! sad

merci encore

Hors ligne

#8 Le 08/01/2013, à 18:43

claudius01

Re : lancer Treetagger depuis un programme java

Re lynda12,

- Ok pour mon_script (il faudra qu'il soit impérativement exécutable, c'est pourquoi je souhaitais avoir le résultat complet de la ligne de commande "pwd ; ls -l mon_script ; cat mon_script")

- Le lancement de mon_script se fera par :

mon_script <password> <fichier_a_tagger> <fichier_resultat>

- S'agissant de l'appel d'une commande avec argument depuis Java, ci-après un bout de code qui devrait te montrer qu'il n'a y a pas de différence notable entre WIndows et Linux - hormis les chemins d'accès et le programme de lancement sous Windows :

cmd

qui devient sous Linux :

bash -c

Maintenant le petit bout de code :

    public void launchScriptTest() {

        String os = System.getProperty("os.name");
        logger.info("launchScriptTest(): Starting under [" + os + "]...");

        try {
            String args[] = null;

            if (os.equals("Windows XP")) {
                String locArgs[] = { "explorer.exe", "C:\\Program Files" };
                args = locArgs;
            }
            else {
                // Unix probably ;-)
                String locArgs[] = { "bash", "-c", "clear" };
                args = locArgs;
            }

            Runtime runtime = Runtime.getRuntime();
            final Process p = runtime.exec(args);

        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        }

        logger.info("launchScriptTest(): Leaving");
    }

Ce test consiste à lancer sous Windows XP la commande ' explorer.exe "C:\Program Files" ' et sous Linux la commande '  bash -c clear  ' (effacement de l'écran)

- Pour finir, la ligne pour Windows

String cmd = new String("cmd /c C:\\TreeTagger\\bin\\tag-english.bat  C:\\workspace\\My_Work\\"+path + " C:\\workspace\\My_Work\\" + pathResult);

sera a remplacer pour Linux par (sous condition que mon_script soit dans le PATH de l'environnement)

String cmd = new String("bash -c \"mon_script <password> <fichier_a_tagger> <fichier_resultat>\"");

En espérant t'avoir aidée, A+
--
Claudius

Dernière modification par claudius01 (Le 08/01/2013, à 23:40)

Hors ligne

#9 Le 09/01/2013, à 10:16

lynda12

Re : lancer Treetagger depuis un programme java

Je te remercie infiniment Claudius, tu m'as beaucoup éclairée smile

Hors ligne

Haut de page ↑