Die b
zeigt an, dass, was Sie haben bytes
ist, das ist eine binäre Sequenz von Bytes anstelle einer Zeichenfolge von Unicode-Zeichen. Unterprozessausgabebytes, nicht Zeichen, das ist also was communicate()
zurückgibt.
Der bytes
Typ ist nicht direkt print()
der Lage, so dass Sie die repr
der bytes
gezeigt werden sind Sie haben. Wenn Sie die Codierung der Bytes wissen Sie von der subprocess erhalten haben, können Sie decode()
nutzen sie in ein druckbares str
zu konvertieren:
>>> print(b'hi\n'.decode('ascii'))
hi
Natürlich ist dieses spezifische Beispiel funktioniert nur, wenn Sie tatsächlich ASCII aus dem subprocess erhalten . Wenn es nicht ASCII ist, erhalten Sie eine Ausnahme erhalten:
>>> 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…
Das Newline-Teil ist, was echo hi
Ausgang. echo
ist der Auftrag, die Parameter, die Sie übergeben, gefolgt von einem Zeilenumbruch auszugeben. Wenn Sie in Leerzeichen rund um den Prozessausgang nicht interessiert sind, können Sie strip()
wie so verwenden:
>>> b'hi\n'.strip()
b'hi'
Welche Version von Python verwenden Sie? – Necrolyte2
Verwenden von Version 3.3 – imagineerThat
Nicht sicher über das 'b', aber die Newline ist, weil 'hallo hallo' 'hi \ r \ n' druckt. Um dies zu vermeiden, könnten Sie am Ende oder einem ähnlichen Fix .strip() hinzufügen. – azhrei