Le bindique que ce que vous avez est bytesune séquence binaire d'octets plutôt qu'une chaîne de caractères Unicode. Les sous-processus produisent des octets, pas des caractères, c'est donc ce qui communicate()revient.
Le bytestype n'est pas directement print()capable, donc on vous montre le reprque bytesvous avez. Si vous connaissez le codage des octets que vous avez reçus du sous-processus, vous pouvez utiliser decode()pour les convertir en un imprimable str:
>>> print(b'hi\n'.decode('ascii'))
hi
Bien sûr, cet exemple spécifique ne fonctionne que si vous recevez réellement l'ASCII du sous-processus. Si ce n'est pas ASCII, vous obtiendrez une exception:
>>> 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 nouvelle ligne fait partie de ce qui echo hia une sortie. echoLe travail de ce dernier est de sortir les paramètres que vous lui transmettez, suivis d 'une nouvelle ligne. Si vous n'êtes pas intéressé par les espaces autour de la sortie du processus, vous pouvez utiliser strip()comme ceci:
>>> b'hi\n'.strip()
b'hi'