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 :

Affichage résultat commande Popen


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 30
    Par défaut Affichage résultat commande Popen
    Bonjour,
    Je souhaiterais récupérer l'affichage d'une commande exécutée a l'aide de Popen, mais le problème c'est que l'affichage est très mauvais.
    Exemple de l'affichage que je récupère lorsque j'exécute un ping :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    b'\r\n'
    b"Envoi d'une requ\x88te 'ping' sur google.fr [216.239.59.104] avec 32 octets de donn\x82es\xff:\r\n"
    b'R\x82ponse de 216.239.59.104\xff: octets=32 temps=48 ms TTL=55\r\n'
    b'R\x82ponse de 216.239.59.104\xff: octets=32 temps=46 ms TTL=55\r\n'
    b'R\x82ponse de 216.239.59.104\xff: octets=32 temps=46 ms TTL=55\r\n'
    b'R\x82ponse de 216.239.59.104\xff: octets=32 temps=53 ms TTL=55\r\n'
    b'\r\n'
    b'Statistiques Ping pour 216.239.59.104:\r\n'
    b' Paquets\xff: envoy\x82s = 4, re\x87us = 4, perdus = 0 (perte 0%),\r\n'
    b'Dur\x82e approximative des boucles en millisecondes :\r\n'
    b' Minimum = 46ms, Maximum = 53ms, Moyenne = 48ms\r\n'
    b''
    Comment faire pour avoir un affichage correct ?

    Voici comment j'utilise la fonction Popen:
    Le résultat est affiché dans une page web html.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            p = Popen([commande, IP], stdout=PIPE)
            res = open("resultat.html",'w+')
            res.write("<html><body><h1> Vous avez demandé un " + commande + " vers " + IP + " </h1><br/>")
            while True:
                line = p.stdout.readline()
                res.write("<br/>" + str(line))
                if not line:    
                    break
    Merci de votre aide.

  2. #2
    Membre chevronné
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Par défaut
    Bonjour,

    Il semblerait que l'affichage soit au format ASCII oem alors que python utilise du ASCII ANSI

    il existe les méthodes encode et decode j'aurai pensé pouvoir faire ceci mais le codecs oem n'existe pas peut-être a t-il un autre nom

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    'R\x82ponse'.decode(  'oem' ) .encode("utf8")
    bon courage
    Mon guide pour apprendre Tkinter - N'oubliez pas de consulter les FAQ Python ou de visiter mon blog

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 30
    Par défaut
    Non apparement il ne connait pas eom.

    Si je fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    res.write("<br/>" + line.decode('eom') .encode('utf8'))
    LookupError: unknown encoding: eom
    ou ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    res.write("<br/>" + line.decode() .encode('utf8'))
    TypeError: Can't convert 'bytes' object to str implicitly

  4. #4
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Attention, tu as tapé eom au lieu de oem.

  5. #5
    Membre chevronné
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Par défaut
    Bonjour

    Voici un début
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    def oem2ansi( oem ) :
        r = oem.replace( '\x82', '\xc3\xa9' )
        r = r.replace( '\xe8', '\xc3\xa8' )
        r = r.replace( '\x87', '\xc3\xa7' )
        r = r.replace( '\x85', '\xc3\xa0' )
        r = r.replace( '\x97', '\xc3\xb9' )
        r = r.replace( '\x8b', '\xc3\xaf' )
        return r # .decode("utf-8") pour unicode
     
    print  oem2ansi( 'R\x82ponse' )
    Pour continuer : Table ASCII OEM

    bon courage
    Mon guide pour apprendre Tkinter - N'oubliez pas de consulter les FAQ Python ou de visiter mon blog

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 30
    Par défaut
    Merci beaucoup pour ta réponse.
    Cette fonction est très utile mais je n'arrive pas à l'appliquer à la ligne que je récupère.
    Voici comment je procède :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                line = p.stdout.readline()
                if not line:    
                    break
                rep = oem2ansi( str(line) )
                print (str(rep))
    Mais il m'affiche le même résultat que précédemment.
    je suis obligé de faire str(line) car si non j'ai une erreur lors de l'exécution de la fonction.
    Où est mon erreur ?
    Merci de votre aide.

  7. #7
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Citation Envoyé par vincent.mbg Voir le message
    Bonjour

    Voici un début
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    def oem2ansi( oem ) :
        r = oem.replace( '\x82', '\xc3\xa9' )
        r = r.replace( '\xe8', '\xc3\xa8' )
        r = r.replace( '\x87', '\xc3\xa7' )
        r = r.replace( '\x85', '\xc3\xa0' )
        r = r.replace( '\x97', '\xc3\xb9' )
        r = r.replace( '\x8b', '\xc3\xaf' )
        return r # .decode("utf-8") pour unicode
     
    print  oem2ansi( 'R\x82ponse' )
    Pour continuer : Table ASCII OEM

    bon courage
    Bonsoir,
    je remonte ce post pour savoir comment on passe de la table donnée en PDF aux replace ci-dessus.

Discussions similaires

  1. [MySQL] Affichage résultat requête SQL dans page HTML comme un tableau
    Par joxbl dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 14/03/2011, 14h26
  2. [SQL] Affichage résultat requête dans un tableau, bouton affichage page
    Par megapacman dans le forum PHP & Base de données
    Réponses: 35
    Dernier message: 18/05/2006, 16h42
  3. Réponses: 1
    Dernier message: 11/05/2006, 16h37
  4. Affichage résultat type Google (multipage multibase)
    Par LeCaméléon dans le forum XMLRAD
    Réponses: 7
    Dernier message: 02/04/2006, 16h17
  5. Affichage résultat de requête dans un champ
    Par dj-julio dans le forum WinDev
    Réponses: 1
    Dernier message: 18/01/2006, 10h51

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