Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: retr02332 en 28 Noviembre 2019, 03:20 am



Título: subprocess.Popen() en python 3
Publicado por: retr02332 en 28 Noviembre 2019, 03:20 am
Hola a todos, una pregunta.

En python 2.7 cuando hago un subprocess.Popen() y guarda en una variable la salida de stdout, esta se guarda en str. En cambio cuando hago lo mismo en python 3.7, esta salida ya no es en str, sino en bytes.

Mi pregunta es, ¿como puedo hacer para que la salida no sea en bytes, sino que sea en str?

Agradezco sus respuestas.


Título: Re: subprocess.Popen() en python 3
Publicado por: engel lex en 28 Noviembre 2019, 03:56 am
no hay forma directa, la cosa es que la captura de datos cambio entre python 2 y 3, ya que el 3 te da el acceso a los datos en bajo nivel y te obliga a hacer la transformacion a mano por si la codificacion no es ascii o utf8... en caso que quieras hacer la transformacion simple con .decode() a la cadena de bytes te lo va a transformar a texto


Título: Re: subprocess.Popen() en python 3
Publicado por: retr02332 en 28 Noviembre 2019, 04:53 am
En eso tienes toda la razon, efectivamente python trata de convertirme los bytes a str cuando llamo al metodo .decode().

El problema es en windows creo, porque en linux esto no me pasa.

El error que me bota el cmd cuando ejecuto el script es el siguiente:

UnicodeDecodeError: 'utf-8' codec can´t decode byte 0xa3 in position 52: invalid start byte


Título: Re: subprocess.Popen() en python 3
Publicado por: engel lex en 28 Noviembre 2019, 14:13 pm
exacto por eso mismo es que pusieron la conversion a mano, porque si te pasa eso en python2 no tienes como resolver facilmente....

lo que pasa es que hay un caracter unicode que no corresponde a utf8...y no corresponde porque windows usa ISO-8859-1, entonces le dices que haga el decode con ese formato .decode('ISO-8859-1')