Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1490 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  Retour de commande dans Textbox avec caracteres bizarre

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Retour de commande dans Textbox avec caracteres bizarre

n°2464141
xunil2003
Posté le 13-02-2024 à 20:23:08  profilanswer
 

Bonjour,
 
Je suis sur python 3.11.2 sur Linux Ubuntu
 
J'ai besoin d'avoir un retour de commande shell dans un Tetbox
 
 

Code :
  1. import subprocess
  2. process = subprocess.Popen(['/opt/go2tv/go2tv', '-l'], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE) #"ls -alh /dev"
  3. liste_retour = process.stdout.readlines()
  4.    
  5. print ("liste_retour : ", liste_retour)
  6. for idex, retour in enumerate(liste_retour):
  7. checklist.insert("end", retour)


 
mais une fois dans la Textbox, il  y a des caractéres bizarre

Code :
  1. Device 1
  2. --------
  3. Model: [TV]Samsung LED22
  4. URL:   http://192.168.1.27:7676/smp_15_


 
et la liste resemble a ça

Code :
  1. liste_retour :  [b'\n', b'\x1b[1mDevice 1\x1b[0m\n', b'\x1b[1m--------\x1b[0m\n', b'\x1b[1mModel:\x1b[0m [TV]Samsung LED22\n', b'\x1b[1mURL:\x1b[0m   http://192.168.1.27:7676/smp_15_n', b'\n']


 
Pouvez-vous m'aidrer ?
 
Merci d'avance pour vos avis et conseils.


Message édité par xunil2003 le 13-02-2024 à 20:28:51
mood
Publicité
Posté le 13-02-2024 à 20:23:08  profilanswer
 

n°2464159
rat de com​bat
attention rongeur méchant!
Posté le 13-02-2024 à 22:58:21  profilanswer
 

Ces caractères permettent d'afficher du texte en couleur dans un terminal qui le supporte (comme c'est le cas sous Linux). Il faudra filtrer ça, avec un truc tout fait ou à la main.
 
https://en.wikipedia.org/wiki/ANSI_escape_code


---------------
matos à vendre
n°2464164
xunil2003
Posté le 14-02-2024 à 08:01:38  profilanswer
 

Re,  
Quand vous dites 'il faut filter' que voulez vous dire ? quoi utiliser pour filtrer avec python ?
Je ne comprend pas tres bien ce que vous voulez dire par filtrer ?
 

Code :
  1. def test():
  2.     liste  = []
  3.     liste_retour = [b'\n', b'\x1b[1mDevice 1\x1b[0m\n', b'\x1b[1m--------\x1b[0m\n', b'\x1b[1mModel:\x1b[0m [TV]Samsung LED22\n', b'\x1b[1mURL:\x1b[0m   http://192.168.1.27:7676/smp_15_n', b'\n']
  4.     for index, valeur in enumerate(liste_retour):
  5.         print ("valeur : ",valeur)
  6.      
  7. test()


 
me retourne :

Code :
  1. serveur@RPI-5:~ $ python3 /home/serveur/Langages/python/3/videos2/test-01.py
  2. valeur :  b'\n'
  3. valeur :  b'\x1b[1mDevice 1\x1b[0m\n'
  4. valeur :  b'\x1b[1m--------\x1b[0m\n'
  5. valeur :  b'\x1b[1mModel:\x1b[0m [TV]Samsung LED22\n'
  6. valeur :  b'\x1b[1mURL:\x1b[0m   http://192.168.1.27:7676/smp_15_n'
  7. valeur :  b'\n'
  8. serveur@RPI-5:~ $


 
Ou bien je n'utilise pas la bonne métode ?
Pour filtrer faut-til trier les caractéres un par un, de la liste afin de les supprimer ?
Merci


Message édité par xunil2003 le 14-02-2024 à 08:04:35
n°2464169
mechkurt
Posté le 14-02-2024 à 08:59:05  profilanswer
 

Non l'idée c'est de faire un replace de tout ce que tu veux supprimer avant l'affichage...
https://www.w3schools.com/python/ref_string_replace.asp
 
Genre:

Code :
  1. for idex, retour in enumerate(liste_retour):
  2.     retour = retour.replace("[1m", "" )
  3.     retour = retour.replace("[0m", "" )
  4.     checklist.insert("end", retour)


 
Chui pas un pro de python, y'a surement mieux que replace pour remplacer plusieurs chaines différente... :o


---------------
D3
n°2464175
xunil2003
Posté le 14-02-2024 à 09:50:27  profilanswer
 

Re,
 
avec :

Code :
  1. for index, retour in enumerate(liste_retour):
  2.     print ("retour : ",retour)
  3.     retour2 = retour.replace("[1m", "" )


il me retourne
 

Code :
  1. serveur@RPI-5:~ $ python3 /home/serveur/Langages/python/3/videos2/test-01.py
  2. retour :  b'\n'
  3. Traceback (most recent call last):
  4.   File "/home/serveur/Langages/python/3/videos2/test-01.py", line 65, in <module>
  5.     test3()
  6.   File "/home/serveur/Langages/python/3/videos2/test-01.py", line 57, in test3
  7.     retour2 = retour.replace("[1m", "" )
  8.               ^^^^^^^^^^^^^^^^^^^^^^^^^^
  9. TypeError: a bytes-like object is required, not 'str'
  10. serveur@RPI-5:~ $


Faut-il y traiter bytes par bytes ?
 
Merci.


Message édité par xunil2003 le 14-02-2024 à 09:51:45
n°2464181
mechkurt
Posté le 14-02-2024 à 10:13:25  profilanswer
 

Comme je le disais, j'y connais pas grand chose en Python mais avec le message d'erreur dans Google on peut trouver ce genre de chose :
https://www.stechies.com/typeerror- [...] d-not-str/
 
A priori faut convertir en UTF8 ce qui est ouvert en mode binaire (genre ton Popen, a priori).
Essaye en ajoutant :

Code :
  1. retour.decode('utf8')


---------------
D3

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  Retour de commande dans Textbox avec caracteres bizarre

 

Sujets relatifs
Bug bizarre : erreur 500 sur phpinfo[Résolu] Comportement bizarre d'une fonction entre PHP5 et PHP8
[Powershell] Commande Enter-PSSession OK, Invoke-Command NOKComportement d'événement Javascript bizarre
Retirer les 7 derniers caractères de nom de fichiers[C] permettre à l’utilisateur de modifier une chaîne de caractères
[ksh] Mixture bizarre dans une chaine de caracteres - getoptsTextBox séparateur des milliers lors de la saisie
[Powershell] [RESOLU] Lire caractères à partir du 17eme d'une chaine 
Plus de sujets relatifs à : Retour de commande dans Textbox avec caracteres bizarre


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR