O b
indica que o que você tem é bytes
uma sequência binária de bytes, em vez de uma string de caracteres Unicode. Subprocessa bytes de saída, não caracteres, então é isso que communicate()
está retornando.
O bytes
tipo não print()
pode ser diretamente ativado, então você está sendo mostrado o repr
de que bytes
você tem. Se você souber a codificação dos bytes recebidos do subprocesso, poderá usá decode()
-los para convertê-los em um imprimível str
:
>>> print(b'hi\n'.decode('ascii'))
hi
É claro que este exemplo específico só funciona se você realmente estiver recebendo ASCII do subprocesso. Se não for ASCII, você receberá uma exceção:
>>> 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…
A nova linha é parte do que echo hi
tem saída. echo
O trabalho de é produzir os parâmetros que você passa, seguido por uma nova linha. Se não estiver interessado em espaços em branco ao redor da saída do processo, você pode usar da seguinte strip()
forma:
>>> b'hi\n'.strip()
b'hi'