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 :

python et encodage commande windows


Sujet :

Python

  1. #1
    Membre actif
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Points : 267
    Points
    267
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    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 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Membre actif
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Points : 267
    Points
    267
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    f = open("test2.txt", 'r',encoding='cp850')
    Du coup mon code en python 3.0 deviens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

Discussions similaires

  1. Passer du disque c au disque d avec commande windows
    Par Alain15 dans le forum Windows XP
    Réponses: 2
    Dernier message: 06/05/2014, 15h48
  2. Encodage ligne de commande Windows
    Par Nious99 dans le forum Langage
    Réponses: 1
    Dernier message: 01/11/2008, 00h35
  3. se déplacer avec l'invite de commandes (windows xp)
    Par kriskikout dans le forum Langage
    Réponses: 9
    Dernier message: 05/05/2006, 15h59
  4. Invite de commandes windows et Unicode Java
    Par guipom dans le forum Windows
    Réponses: 6
    Dernier message: 08/03/2006, 18h21
  5. parametres de l'interpréteur de commande windows (cmd.exe)
    Par LE CORRE dans le forum Windows XP
    Réponses: 2
    Dernier message: 21/01/2006, 15h12

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