Trong Python, và nói chung - một hoạt động close()
trên một đối tượng tệp ngụ ý một hoạt động flush()
?hiện gần() ngụ ý flush() trong Python?
Trả lời
Có. Nó sử dụng hàm close()
nằm bên dưới để thực hiện điều đó cho bạn (source).
NB: close()
và flush()
sẽ không đảm bảo rằng dữ liệu thực sự an toàn trên đĩa. Nó chỉ đảm bảo rằng hệ điều hành có dữ liệu == rằng nó không được đệm bên trong tiến trình.
Bạn có thể thử đồng bộ hóa hoặc fsync để nhận dữ liệu được ghi vào đĩa.
True, nhưng không phải hệ điều hành hiện đại ghi dữ liệu vào đĩa khi chấm dứt quá trình? –
Phụ thuộc vào quy mô thời gian bạn đang nói đến. ví dụ. một số phiên bản của ext4 có thể chờ cả giây trước khi cam kết dữ liệu của bạn vào đĩa. –
+1 Nếu thứ tự độ lớn là giây, tôi khá an toàn. Cảm ơn! –
filehandle.close không nhất thiết phải tuôn ra. Đáng ngạc nhiên, filehandle.flush không giúp được gì cả --- nó vẫn có thể bị kẹt trong bộ đệm hệ điều hành khi Python đang chạy. Quan sát phiên này, nơi tôi đã viết vào một tập tin, đóng nó và Ctrl-Z để dấu nhắc lệnh shell và kiểm tra các tập tin:
$ cat xyz
ghi
$ fg
python
>>> x=open("xyz","a")
>>> x.write("morestuff\n")
>>> x.write("morestuff\n")
>>> x.write("morestuff\n")
>>> x.flush
<built-in method flush of file object at 0x7f58e0044660>
>>> x.close
<built-in method close of file object at 0x7f58e0044660>
>>>
[1]+ Stopped python
$ cat xyz
ghi
Sau đó tôi có thể mở lại tập tin, và rằng nhất thiết phải đồng bộ hóa các tập tin (bởi vì, trong trường hợp này, tôi mở nó ở chế độ phụ thêm). Như những người khác đã nói, syscall đồng bộ (có sẵn từ gói os) nên tuôn ra tất cả các bộ đệm vào đĩa nhưng nó có thể có tác động toàn hệ thống (nó đồng bộ tất cả các tệp trên hệ thống).
Hm - Tôi nghi ngờ vấn đề của bạn là bạn không thực sự ** gọi ** 'flush()' hoặc 'close()' - bạn vừa kết thúc hiển thị biểu diễn của họ! Bạn cần parens để gọi những phương pháp đó. –
- 1. Lệnh tệp Linux: SYSV ngụ ý gì?
- 2. Ngụ ý và lệnh khai báo
- 3. SQL: NULL như ColumnName ngụ ý
- 4. macosx-version-min ngụ ý điều gì?
- 5. Ngụ ý bình đẳng trong kết hợp mẫu Haskell
- 6. Cú pháp PHP thú vị: một 'ngụ ý nếu'?
- 7. Ngụ ý so sánh chuỗi, 0 = '', nhưng 1 = '1'
- 8. CHỌN DISTINCT ngụ ý một loại kết quả
- 9. Ngụ ý và triển khai rõ ràng giao diện
- 10. Ngụ ý của việc sử dụng Facebook offline_access
- 11. gì đang ngụ ý kiểu generic thông số
- 12. PostgreSQL: UPDATE ngụ ý di chuyển trên phân vùng
- 13. Tại sao TreeNodeCollection không ngụ ý IEnumerable <TreeNode>?
- 14. Nút Winforms: Hiển thị = false ngụ ý Bật = false?
- 15. Ngụ ý và liên kết rõ ràng với một DLL
- 16. Việc làm tốt trong jQuery có ngụ ý là tốt trong JavaScript không?
- 17. Android: Flush DNS
- 18. Hành vi này của setInterval có ngụ ý hành vi đa luồng trong Javascript không?
- 19. Nếu `self` luôn là bộ nhận ngụ ý trong Ruby, tại sao` self.puts` không hoạt động?
- 20. Trạng thái xử lý sbwait ngụ ý trong đầu FreeBSD là gì?
- 21. có khả năng phát hiện REST và HATEOAS ngụ ý rằng bạn có thể thay đổi URI không?
- 22. Powershell stdout flush
- 23. gần Neighbor Tìm kiếm: Python
- 24. C++ ngụ ý điều này, và chính xác cách nó được đẩy lên ngăn xếp
- 25. LINQ to Entities Tham gia trên Nullable Dòng nơi Null Ngụ ý "Match All"
- 26. Delphi^Cú pháp: Tài liệu, ngụ ý, hoặc không có giấy tờ?
- 27. Liệu [=] ngụ ý rằng tất cả các biến cục bộ sẽ được sao chép?
- 28. Có đọc từ stdin flush stdout không?
- 29. Dùng flush() trước khi đóng()
- 30. mysql - FLUSH TABLE cần thiết?
(Nói cách khác: Tập tin I/O được đệm được trừu tượng hóa lớn và bị ẩn khỏi bạn. Làm một 'mở',' viết', 'gần' không được để lại những thứ không được viết như bạn đã dự định Một bộ đệm thường xuyên ăn những gì được ném vào nó sẽ là một thiết kế khá xấu [hoặc một bộ đệm đói].) – Joey
Cảm ơn, đó là dự đoán của tôi quá. Nhưng đây có phải là nền tảng chéo, cross-OS và cross-languages thực sự không? –
@Adam Matan: Đó là lý do Python nằm trên các thư viện C. Để đảm bảo rằng "nền tảng chéo, hệ điều hành thực sự" này. Tôi không biết "cross-languages" có nghĩa là gì. –