Le site b
indique que ce que vous avez est bytes
qui est une séquence binaire d'octets plutôt qu'une chaîne de caractères Unicode. Les sous-processus produisent des octets, et non des caractères, et c'est donc ce qu'ils font. communicate()
est de retour.
Le site bytes
n'est pas directement print()
capable, donc on vous montre le repr
de la bytes
dont vous disposez. Si vous connaissez l'encodage des octets que vous avez reçus du sous-processus, vous pouvez utiliser decode()
pour les convertir en une version imprimable str
:
>>> print(b'hi\n'.decode('ascii'))
hi
Bien entendu, cet exemple spécifique ne fonctionne que si vous recevez réellement un message ASCII du sous-processus. S'il ne s'agit pas d'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 que echo hi
a une sortie. echo
Le travail de l'utilisateur est d'afficher les paramètres que vous lui passez, suivis d'une nouvelle ligne. Si vous n'êtes pas intéressé par l'espace blanc entourant la sortie du processus, vous pouvez utiliser la commande strip()
comme ça :
>>> b'hi\n'.strip()
b'hi'