は、Unicode 文字の文字列ではなく、バイナリ シーケンスのバイトであることbを示します。bytes文字ではなく出力バイトをサブプロセスするため、それ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'