Il b
indica che quello che hai è bytes
, che è una sequenza binaria di byte anziché una stringa di caratteri Unicode. I sottoprocessi restituiscono i byte, non i caratteri, ecco cosa restituisce communicate()
.
Il tipo bytes
non è direttamente print()
in grado, quindi sei stato mostrato il repr
del bytes
che avete. Se si conosce la codifica del byte che hai ricevuto dal sottoprocesso, è possibile utilizzare decode()
per convertirli in un stampabile str
:
>>> print(b'hi\n'.decode('ascii'))
hi
Naturalmente, questo esempio specifico funziona solo se effettivamente si ricevono ASCII dal sottoprocesso . Se non è ASCII, si otterrà un'eccezione:
>>> 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…
La nuova linea è parte di ciò che ha echo hi
uscita. Il lavoro di echo
è quello di emettere i parametri che si passa, seguito da una nuova riga. Se non siete interessati a spazi che lo circondano l'uscita di processo, è possibile utilizzare strip()
in questo modo:
>>> b'hi\n'.strip()
b'hi'
Quale versione di Python stai usando? – Necrolyte2
Utilizzo della versione 3.3 – imagineerThat
Non sono sicuro della 'b', ma la nuova linea è perché 'echo hi' stampa' hi \ r \ n'. Per evitare ciò, è possibile aggiungere .strip() alla fine o una soluzione simile. – azhrei