subprocess.Popen() en python 3

Iniciado por retr02332, 28 Noviembre 2019, 03:20 AM

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

retr02332

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.

engel lex

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

retr02332

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

engel lex

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')
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.