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'