b何を持っていることであることを示しているbytesバイトのバイナリ列ではなく、Unicode文字の文字列です。文字ではなく出力バイトをサブプロセスするので、それcommunicate()が返されます。
bytesタイプは、直接ではありませんprint()あなたが表示されているので、可能なreprのbytesあなたが持っているの。サブプロセスから受け取ったバイトのエンコーディングがわかっている場合は、decode()それらを使用して印刷可能なものに変換できますstr。
>>> print(b'hi\n'.decode('ascii'))
hi
もちろん、この特定の例は、実際にサブプロセスからASCIIを受信している場合にのみ機能します。ASCIIでない場合は、例外が発生します。
>>> 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…
改行はecho hi出力されたものの一部です。 echoの仕事は、渡したパラメータを出力し、その後に改行を続けることです。プロセス出力を囲む空白に興味がない場合は、次のstrip()ように使用できます。
>>> b'hi\n'.strip()
b'hi'