Dấu b
chỉ ra rằng những gì bạn có là bytes
một chuỗi nhị phân của các byte chứ không phải là một chuỗi các ký tự Unicode. Các quy trình con xuất ra các byte, không phải ký tự, vì vậy đó là những gì communicate()
đang trả về.
Các bytes
loại là không trực tiếp print()
có thể, vì vậy bạn được hiển thị trong repr
của bytes
bạn có. Nếu bạn biết mã hóa của các byte bạn nhận được từ quy trình con, bạn có thể sử dụng decode()
để chuyển đổi chúng thành một tệp có thể in được str
:
>>> print(b'hi\n'.decode('ascii'))
hi
Tất nhiên, ví dụ cụ thể này chỉ hoạt động nếu bạn thực sự đang nhận ASCII từ quy trình con. Nếu nó không phải là ASCII, bạn sẽ nhận được một ngoại lệ:
>>> 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…
Dòng mới là một phần của những gì echo hi
có đầu ra. echo
Công việc của bạn là xuất các tham số bạn truyền vào, theo sau là một dòng mới. Nếu bạn không quan tâm đến khoảng trắng xung quanh đầu ra quy trình, bạn có thể sử dụng strip()
như vậy:
>>> b'hi\n'.strip()
b'hi'