AYUDA con Python 3

Iniciado por Aguijon_zerO, 26 Junio 2018, 23:58 PM

0 Miembros y 1 Visitante están viendo este tema.

Aguijon_zerO

Tengo que enviar la salida de un comando "ipconfig" utilizando un socket con el método check_output del modulo subprocess. Este proceso solía ser fácil en la versión Python 2.7 pero en Python 3 todo es más complicado y me muestra un UnicodeDecodeError.

Este es el código que envía los bytes:


import socket
import subprocess

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(("localhost",7500))

m = subprocess.check_output('ipconfig')
client.send(m)


Por supuesto, no es necesario convertirlo a bytes para enviarlo porque la salida de check_output ya entrega valores en formato de bytes.

Hasta hay todo bien, Pero el problema ocurre en el siguiente codigo que recibe los datos ya que no me permite decodificarlo.

El código que recibe los datos es el siguiente:


import socket

serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serv.bind(("localhost",7500))
serv.listen(1)

conex,direccion = serv.accept()
a = conex.recv(4096)
print(a.decode('utf-8'))


Cuando ejecuto este codigo me muestra el siguiente error: en la ultima linea, en la que dice "print(a.decode('utf-8'))" , El error que me sale es el siguiente:


UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa2 in position 13: invalid start byte


Alguien me podría ayudar, llevo muy poco tiempo usando Python 3 y no se que hacer  :-[



HACKING / CiberSecurity:
https://seguridadaguijon.blogspot.com/

Avispon99

#1
Resolviendo...


import socket

serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serv.bind(("localhost",7500))
serv.listen(1)

conex,direccion = serv.accept()
a = conex.recv(4096)
print(a.decode('utf-8', 'surrogateescape'))


Eso es todo.. agregar ['surrogateescape'] para eliminar los caracteres de escape que interfieren con la decodificación de los bytes, otra opción es decodificando con la pagina de codigos (var.decode("cp850"), por ejemplo) para manejo de ciertos caracteres molestos.. 

Problema resuelto, Tema Cerrado.  :v



Aguijon_zerO

Si funciona. :D   Con "cp850" se arreglo.
HACKING / CiberSecurity:
https://seguridadaguijon.blogspot.com/