Symbol b
wskazuje, że to, co masz bytes
, jest binarną sekwencją bajtów, a nie ciągiem znaków Unicode. Podprocesy wysyłają bajty, a nie znaki, więc to właśnie communicate()
zwraca.
bytes
Typ nie jest bezpośrednio print()
w stanie, więc jesteś jest pokazany repr
z bytes
masz. Jeśli znasz kodowanie bajtów, które otrzymałeś z podprocesu, możesz użyć ich decode()
do przekształcenia ich w plik drukowalny str
:
>>> print(b'hi\n'.decode('ascii'))
hi
Oczywiście ten konkretny przykład działa tylko wtedy, gdy faktycznie otrzymujesz ASCII z podprocesu. Jeśli to nie jest ASCII, pojawi się wyjątek:
>>> 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…
Nowa linia jest częścią echo hi
wyniku. echo
Zadanie polega na wyświetleniu przekazanych parametrów, po których następuje znak nowej linii. Jeśli nie jesteś zainteresowany białymi znakami otaczającymi wyjście procesu, możesz użyć w ten strip()
sposób:
>>> b'hi\n'.strip()
b'hi'