Python unicode popen o Popen error al leer unicode

Tengo un progtwig que genera el siguiente resultado:

┌───────────────────────┐ │10 day weather forecast│ └───────────────────────┘ ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ Tonight Sep 27 Clear 54 0 % Tue Sep 28 Sunny 85/61 0 % Wed Sep 29 Sunny 86/62 0 % Thu Sep 30 Sunny 87/65 0 % Fri Oct 01 Sunny 85/62 0 % Sat Oct 02 Sunny 81/59 0 % Sun Oct 03 Sunny 79/56 0 % Mon Oct 04 Sunny 78/58 0 % Tue Oct 05 Sunny 81/61 0 % Wed Oct 06 Sunny 81/61 0 % Last Updated Sep 27 10:20 pm CT ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ 

Esto no parece tener el formato correcto en este sitio, pero las líneas inferiores en la parte superior y las líneas superiores en la parte inferior producen un error de Unicode.

Aquí está el ejemplo del código para os.popen

 >>> buffer = popen('10day', 'r').read() Traceback (most recent call last): File "/home/woodnt/python/10_day_forecast.py", line 129, in  line_lower(51) File "/home/woodnt/python/lib/box.py", line 24, in line_lower print upper_line * len UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-50: ordinal not in range(128) >>> print buffer ┌───────────────────────┐ │10 day weather forecast│ └───────────────────────┘ >>> 

Aquí es igual para subprocess.Popen:

 f = Popen('10day', stdout=PIPE, stdin=PIPE, stderr=PIPE) o, er = f.communicate() print o ┌───────────────────────┐ │10 day weather forecast│ └───────────────────────┘ print er Traceback (most recent call last): File "/home/woodnt/python/10_day_forecast.py", line 129, in  line_lower(51) File "/home/woodnt/python/lib/box.py", line 24, in line_lower print upper_line * len UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-50: ordinal not in range(128) 

¿Alguna idea de si esto puede hacerse funcionar sin mucho trabajo “debajo del capó”? Solo estoy aprendiendo progtwigción y comenzando con python

Yo diría que ejecutar su progtwig desde la consola debería funcionar correctamente porque Python puede adivinar la encoding de la consola de la ventana del terminal (cp437 en US Windows), pero cuando se ejecuta a través de una tubería, Python usa el valor predeterminado de ascii. Intente cambiar su progtwig para encode toda la salida de Unicode a una encoding explícita, como:

print (upper_line * len) .encode (‘cp437’)

Luego, cuando lo lea desde la tubería, puede volver a decode a Unicode o imprimirlo directamente en el terminal.