Error de subproceso Python 3 en bytes

Muy bien, tengo un pequeño problema con la salida del subproceso, me meto en Unicode o pienso y no me permite convertirlo a utf-8, este es el código:

import subprocess,sys,time

string = b'dir'
process = subprocess.Popen('cmd.exe', shell=True,cwd="C:\\",stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=None)
process.stdin.write(string)
o,e=process.communicate()
process.wait()
process.stdin.close()
print (o.encode('utf-8'))

Salto el siguiente error:

**Traceback (most recent call last):
  File "C:\Documents and Settings\francisco\Escritorio\k.py", line 12, in <module>
    print (o.encode(utf-8))
AttributeError: 'bytes' object has no attribute 'encode'**

Si imprimo dejando la impresión y si me dejas:

print(o)

Pero imprime lo siguiente:

**b'Microsoft Windows XP [Versi\xa2n 5.1.2600]\r\n(C) Copyright 1985-2001 Microsoft Corp.\r\n\r\nC:\\>\xa8M\xa0s? '**

Y si cambio estas dos lineas:

string = bytes('dir',encoding="utf-8") 
print (n[0].decode("latin"))

Imprimo solo parte de la salida

que falla?

He resuelto de esta manera:

process.stdin.write("dir\n".encode())
o,e=process.communicate()
print (o.decode("utf-8"))

pero me sale un error

Seguimiento (última llamada más reciente): Archivo "C: \ Documents and Settings \ francisco \ Escritorio \ k.py", línea 6, en impresión (o.decode ("utf-8")) UnicodeDecodeError: 'utf-8' El codec no puede decodificar el byte 0xa3 en la posición 103: byte de inicio no válido

Acabo de imprimirlo así:

print (o.decode("latin"))

en latín, puedo corregir este error e imprimirlo en utf-8?

Respuestas a la pregunta(1)

Su respuesta a la pregunta