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

Python Discussion :

récuperer commande avant pipe


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2012
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2012
    Messages : 34
    Points : 31
    Points
    31
    Par défaut récuperer commande avant pipe
    Bonjour,

    Je suis sous Linux, et j'aimerais éxecuter du python sur une autre commande bash.
    Par exemple, j'aimerais pouvoir faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "bonjour" | ./script.py
    Comment puis-je récuperer le résultat de echo "bonjour" (c'est à dire ici "bonjour") dans mon script ?
    sys.argv ne marche pas, il renvoie ['./script.py'] ...

    J'espere avoir été clair et ne pas m'être gouré de forum :/
    Merci beaucoup !

  2. #2
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Bonjour

    Un pipe Unix branche la sortie standard (stdout) de la "commande" de gauche sur l'entrée standard (stdin) de la "commande" de droite.

    Tu pourras donc récupérer le "bonjour" en lisant sys.stdin dans ton script python

    [EDIT] ceci dit, tu ne "récupéres pas le commande avant le pipe" : le pipe est normalement utilisé, et c'est bien le système qui te fait la jonction entre stdout d'un côté (le echo) et stdn de l'autre (script python)
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2012
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2012
    Messages : 34
    Points : 31
    Points
    31
    Par défaut ça marche mais ...
    Merci beaucoup, ça marche !

    Néanmoins, ma "commande de gauche" renvoie beaucoup de lignes, et elles arrivent progressivement.

    Comment puis-je faire pour récuperer la commande ligne par ligne ?


    Merci !

  4. #4
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    via readline pour récupérer les lignes, les unes après les autres ou, si besoin, read(1) pour avoir les caractères les uns après les autres.

    Par exemple :

    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
    [plxpy:~] more gauche.bash 
    iteration=0
    while [ $iteration -ne 10 ]
    do
            echo iteration $iteration
            sleep 1
            iteration=`expr $iteration + 1`
    done
    [plxpy:~] 
    [plxpy:~] more droite.py 
    import os
    import sys
    line = sys.stdin.readline()
    while line:
            print line,
            _ = os.system('date')
            line = sys.stdin.readline()
    [plxpy:~]
    [plxpy:~] ./gauche.bash | python droite.py
    iteration 0
    Mer 26 jui 2013 10:00:12 CEST
    iteration 1
    Mer 26 jui 2013 10:00:13 CEST
    iteration 2
    Mer 26 jui 2013 10:00:14 CEST
    iteration 3
    Mer 26 jui 2013 10:00:15 CEST
    iteration 4
    Mer 26 jui 2013 10:00:16 CEST
    iteration 5
    Mer 26 jui 2013 10:00:17 CEST
    iteration 6
    Mer 26 jui 2013 10:00:18 CEST
    iteration 7
    Mer 26 jui 2013 10:00:19 CEST
    iteration 8
    Mer 26 jui 2013 10:00:20 CEST
    iteration 9
    Mer 26 jui 2013 10:00:21 CEST
    [plxpy:~]
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

Discussions similaires

  1. trois commandes avec pipes
    Par aniss77 dans le forum C
    Réponses: 3
    Dernier message: 26/01/2011, 21h24
  2. commande unix pipe programme c
    Par selmani300 dans le forum C++
    Réponses: 2
    Dernier message: 13/04/2009, 14h58
  3. Réponses: 1
    Dernier message: 18/02/2009, 18h39
  4. Réponses: 5
    Dernier message: 13/07/2007, 16h13
  5. Réponses: 2
    Dernier message: 02/11/2004, 07h52

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