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 :

Call d'un script python à partir d'un shell script ou java


Sujet :

Langage Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29
    Points : 28
    Points
    28
    Par défaut Call d'un script python à partir d'un shell script ou java
    bon ca commence a réellement m'ennuyer donc voici mon soucis

    j ai un script sh qui contient une cmd python et ce dit script doit être appelé par une applic java.

    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
    try {
    			Runtime r = Runtime.getRuntime();
    			Process p = r.exec("/home/user/test.sh");
     
     
    			BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
    			String line = "";
    			while ((line = br.readLine()) != null) {
    				System.out.println(line);
    			}
     
    			p.waitFor();
    			p.exitValue();
     
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    le sh n' a rien d'exotique:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    python /home/usr/monpython.py
    apparament la commande python est ignorée.. si je fais des echo ils apparaissent bien dans ma console.

    je veux aussi récupérer l'output de la commande python.

    j'ai essayé avec jython pour executer mon fichier python mais il semble que celui-ci n'import pas les autres modules du fichié appelé.

    Merci d'avance

  2. #2
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 620
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 620
    Points : 15 697
    Points
    15 697
    Par défaut
    Le résultat est il différent avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Process p = r.exec(new String[]{"python","/home/usr/monpython.py"});

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29
    Points : 28
    Points
    28
    Par défaut
    ca semble idem...

    je récupere rien en output.

    sinon niveau env je suis sur une kubuntu 8.10 - 64bits et le python est une version 2.5

  4. #4
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 620
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 620
    Points : 15 697
    Points
    15 697
    Par défaut
    Si l'exécution du script python envoie un message d'erreur, il ne paraitra pas car seule la sortie classique est affichée, pas celle d'erreur. Il faudrait peut être afficher également cette sortie pour avoir plus d'information.

    Le problème vient peut-être du répertoire. Le script python fonctionne il de manière identique s'il est exécuté en dehors du répertoire courant?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29
    Points : 28
    Points
    28
    Par défaut
    avec l'inputstreamreader, je ne recois pas l'output du shell script?

    si j'essaie avec jython, il me dit qu il ne trouve pas le module qui est importé dans le fichier :-/

  6. #6
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 620
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 620
    Points : 15 697
    Points
    15 697
    Par défaut
    avec l'inputstreamreader, je ne recois pas l'output du shell script?
    En fait, tu ne recois qu'une des 2 sorties du shellscript.

    Sur les systèmes de type unix ainsi que les applications windows en mode console, il y a 2 flux de sortie :
    - Le flux de sortie standard sert a envoyer les messages de fonctionnement normal. En java tu y écris dessus avec System.out.println()
    - Le flux d'erreur standard, sert normalement à envoyer les messages d'erreur. En java on y écris dessus via System.err.println()

    Or ton programme ne lit qu'un seul des flux de sortie standard, tu ne vois donc pas les messages d'erreur. Si tu veux afficher le flux d'erreur, remplace p.getInputStream() par p.getErrorStream();
    Si tu veux lire les deux en même temps il te faudra utiliser un Thread.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29
    Points : 28
    Points
    28
    Par défaut
    merci, j'avais pas fait attention à cette donnée ;-)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Error opening terminal: unknown.
    voilà mon beau message d'erreur :-/

  8. #8
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 620
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 620
    Points : 15 697
    Points
    15 697
    Par défaut
    Ok le problème viens donc de Python qui s'attend a avoir un terminal Unix classique alors qu'il s'agit d'une application java. Il faudrait voir du coté du script Python s'il lui est possible de fonctionner en écrivant juste des données sur la sortie standard, sans se soucier du type de terminal.

    Malheureusement je ne m'y connais pas du tout en Python.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29
    Points : 28
    Points
    28
    Par défaut
    oki je m'aime

    apres 1 semaine de combat intensif aux heures perdues

    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
    ProcessBuilder pb = new ProcessBuilder("python", "/usr/bin/monpython.py", "arg01","arg02");
    			Map<String, String> env = pb.environment();
    			env.put("TERM", "xterm");
     
    			env.put("VAR2", env.get("VAR1") + "suffix");
    			Process p = pb.start();
     
    			BufferedReader br = new BufferedReader(new InputStreamReader(p.getErrorStream()));
    			String line = "";
    			while ((line = br.readLine()) != null) {
    				System.out.println(line);
    			}
     
    			br = new BufferedReader(new InputStreamReader(p.getInputStream()));
    			line = "";
    			while ((line = br.readLine()) != null) {
    				System.out.println(line);
    			}
     
    			p.waitFor();
    			p.exitValue();
    yahoooo :*D

  10. #10
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 620
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 620
    Points : 15 697
    Points
    15 697
    Par défaut
    Je suis pas sur de saisir l'utilité de la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    env.put("VAR2", env.get("VAR1") + "suffix");
    Ainsi que les paramètres Tu es sur que ça t'est vraiment utile?

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29
    Points : 28
    Points
    28
    Par défaut
    désolé, la première ligne est en effet inutile :-)

    sinon pour "arg01","arg02" c'était juste pour afficher une chose générique

    mais ça marche impeccablement, reste plus qu' à threader et mettre des wait pour pas lire tout le temps et c'est niquel.

Discussions similaires

  1. Executer script Python à partir de Python
    Par marsouin_89 dans le forum Général Python
    Réponses: 5
    Dernier message: 19/10/2011, 22h24
  2. Réponses: 2
    Dernier message: 16/06/2011, 07h38
  3. Attendre la fin d'un script externe avant de continuer le script python
    Par Mistervanhalen dans le forum Général Python
    Réponses: 1
    Dernier message: 18/03/2009, 16h05
  4. Réponses: 1
    Dernier message: 06/12/2007, 10h44
  5. Réponses: 1
    Dernier message: 05/10/2007, 23h15

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