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'