El b
indica que lo que tiene es bytes
, que es una secuencia binaria de bytes en lugar de una cadena de caracteres Unicode. Subprocesa bytes de salida, no caracteres, así que eso communicate()
es lo que está regresando.
El bytes
tipo no es directamente print()
capaz, por lo que se le muestra repr
el bytes
que tiene. Si conoce la codificación de los bytes que recibió del subproceso, puede usarlos decode()
para convertirlos en imprimibles str
:
>>> print(b'hi\n'.decode('ascii'))
hi
Por supuesto, este ejemplo específico solo funciona si realmente está recibiendo ASCII del subproceso. Si no es ASCII, obtendrá una excepción:
>>> print(b'\xff'.decode('ascii'))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xff in position 0…
La nueva línea es parte de lo que echo hi
tiene salida. echo
El trabajo es generar los parámetros que le pasas, seguidos de una nueva línea. Si no está interesado en los espacios en blanco que rodean la salida del proceso, puede usar strip()
así:
>>> b'hi\n'.strip()
b'hi'