Câu hỏi: Có cách nào để sử dụng flush=True
cho hàm print()
mà không nhận được BrokenPipeError
không?BrokenPipeError trong Python
Tôi có một kịch bản pipe.py
:
for i in range(4000):
print(i)
tôi gọi nó như thế này từ một dòng lệnh Unix:
python3 pipe.py | head -n3000
Và nó sẽ trả về:
0
1
2
Vì vậy, hiện kịch bản này :
import sys
for i in range(4000):
print(i)
sys.stdout.flush()
Tuy nhiên, khi tôi chạy kịch bản này và ống nó để head -n3000
:
for i in range(4000):
print(i, flush=True)
Sau đó, tôi nhận được lỗi này:
print(i, flush=True)
BrokenPipeError: [Errno 32] Broken pipe
Exception BrokenPipeError: BrokenPipeError(32, 'Broken pipe') in <_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'> ignored
Tôi cũng đã thử các giải pháp dưới đây, nhưng tôi vẫn nhận được BrokenPipeError
:
import sys
for i in range(4000):
try:
print(i, flush=True)
except BrokenPipeError:
sys.exit()
Tôi không thể tạo lại nó trên OS X 10.1 0, hãy thử CentOS 6.6 ngay bây giờ. – jgritty
Tôi vừa thử trên OS X 10.9.4 và tôi không thể tái tạo nó. Tôi gặp lỗi trên Ubuntu 12.04.2 LTS. Tôi sẽ thử Linux Mint Qiana. –
Tất cả các tập lệnh của bạn đều bị vỡ, trừ trường hợp đầu tiên ... – phantom