Le b
indique que ce que vous avez est bytes
une 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 bytes
type n'est pas directement print()
capable, donc on vous montre le repr
que bytes
vous 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 hi
a une sortie. echo
Le 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'