Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Membre actif
    Inscrit en
    décembre 2005
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : décembre 2005
    Messages : 236
    Points : 184
    Points
    184

    Par défaut python et encodage commande windows

    Bonjour

    Je developpe un ptit programme en python 3.0 sous windows seven qui me permet de faire un ping sur une machine. J'utilise la commande système suivante :
    Code :
    1
    2
    3
     
    import os
    read=os.system("ping -n 1 192.168.1.1 >test2.txt");

    La commande s'execute. Mais quand je regarde mon fichier test2.txt j'obtiens la réponse à ma commande avec un encodage bizarre :


    Envoi d'une requˆte 'Ping' 192.168.1.1 avec 32 octets de donn‚esÿ:
    R‚ponse de 192.168.1.1ÿ: octets=32 temps=1 ms TTL=64

    Statistiques Ping pour 192.168.1.1:
    Paquetsÿ: envoy‚s = 1, re‡us = 1, perdus = 0 (perte 0%),
    Dur‚e approximative des boucles en millisecondes :
    Minimum = 1ms, Maximum = 1ms, Moyenne = 1ms
    Je suis un peu perdu

  2. #2
    Expert Confirmé Sénior
    Avatar de tyrtamos
    Profil pro
    Inscrit en
    décembre 2007
    Messages
    2 338
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2007
    Messages : 2 338
    Points : 4 209
    Points
    4 209
    Billets dans le blog
    1

    Par défaut

    Bonjour,

    C'est normal: c'est une commande DOS, elle parle avec un encodage 'cp850' (et non comme Windows qui parle avec une encodage 'cp1252', appelé 'ansi' par microsoft). Il s'agit ici de la manière d'encoder les lettres accentuées.

    Pour lire correctement ton fichier, il faut donc prendre un éditeur de texte qui sait éditer avec cet encodage 'cp850'. Et, curieusement, ce n'est pas le cas du "bloc-notes" de Windows. Mais c'est le cas d'un éditeur comme "notepad++" (et de beaucoup d'autres). Avec cet éditeur, il faudra choisir 'OEM850'.

    Une autre solution: le lire avec Python (attention: c'est en Python 2.7):

    Code :
    1
    2
    3
    4
    5
    6
     
    import sys
    f = open("test2.txt", 'r')
    for ligne in f:
        print ligne.rstrip().decode('cp850').encode(sys.stdout.encoding)
    f.close()
    Dans ce code:
    - l'instruction decode('cp850') convertit le texte 'cp850' en unicode interne,
    - et l'instruction encode(sys.stdout.encoding) convertit le texte unicode dans l'encodage de la console d'affichage utilisée (qui peut être idle ou autre).

    Tyrtamos
    Ne rien ranger permet d'observer la loi universelle d'entropie: l'inévitable convergence vers le chaos...
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Membre actif
    Inscrit en
    décembre 2005
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : décembre 2005
    Messages : 236
    Points : 184
    Points
    184

    Par défaut

    Oui le fichier est destiné à être traité par python. Ta solution marche mais je suis obligé de passé en 2.7 car en 3.0 il ne comprend pas la fonction "encode". Je laisse donc le poste ouvert en attendant de trouver la solution en 3.0. si quelqu'un l'a qu'il n'hésite pas ou alors je mettrai la mienne si je trouve...

    Ps : c'est un peu pénible ces changements de fonction entre les différentes versions

    Edit : Ah bah c'est bon j'ai trouvé. Il suffit de renseigné fopen :

    Code :
    1
    2
     
    f = open("test2.txt", 'r',encoding='cp850')
    Du coup mon code en python 3.0 deviens :

    Code :
    1
    2
    3
    4
    5
    6
    7
     
    import os
    read=os.system("ping -n 1 192.168.1.1 >test2.txt");
    f = open("test2.txt", 'r',encoding='cp850')
    for ligne in f:
        print(ligne)
    f.close()
    Merci pour l'aide apportée

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •