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 :

revenir sur ce qu'il y a dans le stdout


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 30
    Points : 25
    Points
    25
    Par défaut revenir sur ce qu'il y a dans le stdout
    Bonjour,
    Je ne sais pas si le titre est très explicite et si vous avez quelques chose qui convient mieux je le changerai avec plaisir.

    J'ai un programme principale (que je peux modifier) qui appelle une fonction (que je ne peux pas modifier). La fonction va m'écrire une trace dans la cmd qui me sert de stdout que cela se passe bien ou pas, le problème c'est que cette fonction ne me renverra que cela s'est mal passé qu'a la fin de son exécution.

    Existe t il un moyen de récupérer ce qui a été écrit plus tôt dans le stdout.

    Je ne sais pas trop si c'est clair, si vous avez besoin de plus d'explications n'hésitez pas à me demander. Merci pour votre aide

    MLG

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 484
    Points : 9 286
    Points
    9 286
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Juste une idée. Je viens d'utiliser ça sur un programme.

    Comme sys.stdout et sys.stderr sont des types fichier, on peut les remplacer avec cStringIO.StringIO (Python 2.x. Avec Python 3.x, ça se trouve dans le module "io").

    Avant l'appel à la fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    # sauvegarde
    saved_fds = sys.stdout, sys.stderr
    # redirection
    sys.stderr = sys.stdout = sio = cStringIO.StringIO()
    Et après le retour de la fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    # récup de la sortie
    data = sio.getvalue()
    # fermeture du canal
    sio.close()
    # remettre les sorties normales
    sys.stdout, sys.stderr = saved_fds
    # et afficher le résultat
    print data
    En toute logique, Python sauvegarde les valeurs normales des sorties dans sys.__stdout__ et sys.__stderr__, ce qui fait qu'on peut se passer de la sauvegarde ici. Mais ce code est plus général: il fonctionnera, même si une autre redirection est déjà en cours.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 30
    Points : 25
    Points
    25
    Par défaut
    Cela fonctionne et peut remplacer ce que j'essayais de faire. Solution acceptée

    Merci pour ton aide

  4. #4
    Candidat au Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Février 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Février 2013
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Popen
    Bonjour,

    Pour ma part j'utilise le module subprocess. Comme ceci :

    from subprocess import *
    r=Popen(["rsync.exe","-r","--progress","--timeout","10","--rsh=ssh.exe",package,dest],stdout=PIPE)

    # Attend la fin de la commande
    ret=r.poll()
    while ret==None:
    # Request process code
    ret=r.poll()

    print (r.stdout.read())

    L'avantage : tu as la main sur stdin,stdout et stderr
    a+

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

Discussions similaires

  1. cliquer sur un bouton dans un clip et revenir sur la scène principale
    Par FLORE2222 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 3
    Dernier message: 22/03/2012, 14h34
  2. Réponses: 2
    Dernier message: 16/02/2006, 10h24
  3. Réponses: 6
    Dernier message: 16/01/2006, 20h12
  4. Détecter click sur le bouton de l'application dans Taskbar
    Par bob2553 dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 22/08/2005, 23h34
  5. [FLASH 5]un bouton dans une image pour revenir sur une scene
    Par patato valdes dans le forum Flash
    Réponses: 7
    Dernier message: 28/04/2004, 21h21

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