sys.stdout.flush()
làm gì?Cách sử dụng phương thức sys.stdout.flush()
Trả lời
Chuẩn của Python được đệm (nghĩa là nó thu thập một số dữ liệu "được ghi" thành tiêu chuẩn trước khi ghi dữ liệu vào đầu cuối). Gọi sys.stdout.flush()
buộc nó phải "xả" bộ đệm, nghĩa là nó sẽ ghi mọi thứ trong bộ đệm vào thiết bị đầu cuối, ngay cả khi bình thường nó sẽ đợi trước khi làm như vậy.
Dưới đây là một số thông tin tốt về (un) đệm I/O và tại sao nó rất hữu ích:
http://en.wikipedia.org/wiki/Data_buffer
Buffered vs unbuffered IO
tính năng này không hoạt động trên các cửa sổ! –
@Ciastopiekarz Chúng ta có thể làm gì để bộ đệm được xả trên cửa sổ? – helplessKirk
@Ciastopiekarz Bạn hình dung như thế nào? Nếu tôi lấy kịch bản Python của Andrew Clark và thay thế dòng in bằng 'sys.stdout.write ("% d "% i)', thì tôi phải bỏ ghi chú cuộc gọi đến 'sys.stdout.flush()' để lấy bộ đệm để hiển thị khi tập lệnh đang thực thi. –
Hãy xem xét kịch bản Python đơn giản sau đây:
import time
import sys
for i in range(5):
print i,
#sys.stdout.flush()
time.sleep(1)
này được thiết kế để in một số mỗi giây trong năm giây, nhưng nếu bạn chạy nó như bây giờ (tùy thuộc vào đệm hệ thống mặc định của bạn), bạn có thể không thấy bất kỳ đầu ra nào cho đến khi tập lệnh hoàn tất, và sau đó tất cả cùng một lúc bạn sẽ thấy 0 1 2 3 4
được in trên màn hình.
Điều này là do đầu ra đang được lưu vào bộ đệm và trừ khi bạn tuôn ra sys.stdout
sau mỗi print
bạn sẽ không thấy kết quả ngay lập tức. Xóa nhận xét khỏi dòng sys.stdout.flush()
để xem sự khác biệt.
Trong Python 3.x, 'print i' nên được thay thế bằng bản in (i, end = '') bởi vì print() trong Python 3 có một tiền tố mặc định end = '\ n' để nhắc giao diện điều khiển bị xóa. –
Tôi chỉ gặp sự cố này! Cảm ơn rất nhiều vì đã giải thích tại sao điều này giải quyết được! –
Theo hiểu biết của tôi, Khi bao giờ chúng tôi thực hiện in báo cáo đầu ra sẽ được ghi vào bộ đệm. Và chúng ta sẽ thấy đầu ra trên màn hình khi bộ đệm bị xóa (xóa). Theo mặc định bộ đệm sẽ được xóa khi thoát chương trình. NHƯNG CHÚNG TÔI C ALNG C FLNG B FLNG CÁCH CHẠY B byNG bằng cách sử dụng câu lệnh "sys.stdout.flush()" trong chương trình. Trong bộ đệm mã bên dưới sẽ bị xóa khi giá trị của i đạt đến 5.
Bạn có thể hiểu bằng cách thực thi mã bên dưới.
Chiru @ trực tuyến: ~ $ mèo flush.py
import time
import sys
for i in range(10):
print i
if i == 5:
print "Flushing buffer"
sys.stdout.flush()
time.sleep(1)
for i in range(10):
print i,
if i == 5:
print "Flushing buffer"
sys.stdout.flush()
Chiru @ trực tuyến: ~ $
***** ***** OUTPUT
Chiru @ trực tuyến: ~ $ python flush.py
0 1 2 3 4 5 Flushing buffer
6 7 8 9 0 1 2 3 4 5 Flushing buffer
6 7 8 9
Chiru @ trực tuyến: ~ $
import sys
for x in range(10000):
print "HAPPY >> %s <<\r" % str(x),
sys.stdout.flush()
- 1. Cách sử dụng phương thức PrepareForReuse
- 2. Cách sử dụng phương thức Moq.MockRepository.Of()
- 3. Cách sử dụng phương thức onWindowFocusChanged()?
- 4. Python sys.stdout.flush() không hoạt động
- 5. Sử dụng tốt phương thức finalize()
- 6. Phương thức getWindow() không thể sử dụng
- 7. Sử dụng phương thức .where trong Rails3
- 8. Phương thức "Unreveal" sử dụng Zurb Foundation
- 9. sử dụng phương thức recycle() trong TypedArray
- 10. Cách sử dụng phương thức WebClient.DownloadDataAsync() trong ngữ cảnh này?
- 11. Cách sử dụng phương thức any_instance trong Rails
- 12. Rabl.render: cách sử dụng các phương thức trợ giúp xem?
- 13. Cách sử dụng ImageObserver trong phương thức đồ họa drawImage()
- 14. Cách sử dụng phương thức get() của ArrayList
- 15. Cách sử dụng phương thức Pattern.quote là gì?
- 16. Cách sử dụng Phương thức SetDataSource của Lưới Kendo UI
- 17. jQuery - cách sử dụng phương thức "on()" thay vì "live()"?
- 18. Sử dụng phương thức _.debounce() của Underscore
- 19. KeyNotFoundException khi sử dụng phương thức HtmlEntity.DeEntitize()
- 20. Sử dụng var bên ngoài phương thức
- 21. sử dụng Dynamic để thêm phương thức?
- 22. sử dụng đúng cách thức
- 23. Sử dụng phương thức abs() trong java. Trình biên dịch của tôi không biết phương thức
- 24. Bảng phân cảnh: Loại bỏ Popover bằng cách sử dụng phương thức đại biểu/giao thức
- 25. Làm cách nào để biết tôi đang sử dụng phương thức lặp nào khi sử dụng phương pháp Integer.times?
- 26. Sử dụng bộ nhớ khi chuyển đổi phương thức sang phương thức tĩnh
- 27. Khi nào nên sử dụng mẫu phương thức Nhà máy?
- 28. Sử dụng easymock, lặp lại phương thức void gọi
- 29. Sử dụng phương thức POST với HTML Anchor Tags
- 30. Sử dụng câu lệnh và phương thức Đóng
Xem: http://stackoverflow.com/questions/230751/how-to-flush-output-of-python-print – nitin