Symbol bwskazuje, ż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.
bytesTyp nie jest bezpośrednio print()w stanie, więc jesteś jest pokazany reprz bytesmasz. 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 hiwyniku. echoZadanie 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'