2010-12-04 33 views
29

Tôi muốn tạo ramdisk bằng Python. Tôi muốn có thể thực hiện điều này theo cách đa nền tảng, vì vậy nó sẽ hoạt động trên Windows XP-to-7, Mac và Linux. Tôi muốn để có thể đọc/ghi vào đĩa RAM như nó là một ổ đĩa bình thường, tốt nhất là với một ký tự ổ đĩa/đường dẫn.Làm cách nào để tạo ramdisk bằng Python?

Lý do tôi muốn điều này là viết các thử nghiệm cho tập lệnh tạo thư mục có cấu trúc nhất định. Tôi muốn tạo thư mục hoàn toàn trong ramdisk vì vậy tôi chắc chắn rằng nó sẽ bị xóa hoàn toàn sau khi các bài kiểm tra kết thúc. Tôi đã xem xét sử dụng Python tempfile, nhưng nếu kiểm tra sẽ bị dừng ở giữa thư mục có thể không bị xóa. Tôi muốn hoàn toàn chắc chắn rằng nó đã bị xóa ngay cả khi ai đó kéo phích cắm trên máy tính ở giữa thử nghiệm.

+7

Tôi thích nghi ngờ rằng không có cách đơn giản, đa nền tảng nào để thực hiện việc này, vì mỗi HĐH xử lý gắn kết khác nhau. Câu hỏi rất thú vị, mặc dù! –

+0

"nếu kiểm tra sẽ bị dừng ở giữa thư mục có thể không bị xóa" Bạn có bất kỳ bằng chứng nào về điều này không? Điều đó mâu thuẫn với tài liệu. –

+1

@ S.Lott Tôi tưởng tượng nếu thử nghiệm không (có cơ hội để) làm sạch sau khi chính nó. Trong trường hợp nào tôi muốn tranh luận: Tại sao không đơn giản là thực hiện thiết lập kiểm tra đảm bảo trạng thái sạch (xóa thư mục nếu cần thiết, có lẽ), bất kể trạng thái hiện tại? –

Trả lời

13

Làm thế nào về PyFilesystem?

http://docs.pyfilesystem.org/en/latest/memoryfs.html#module-fs.memoryfs

http://docs.pyfilesystem.org/en/latest/tempfs.html#module-fs.tempfs

Nhược điểm là bạn phải truy cập vào hệ thống tập tin với PyFilesystem API, nhưng bạn cũng có thể truy cập vào fs thực với PyFilesystem.

+2

Điều này dường như là giải pháp tốt nhất, nhưng tôi sẽ * cần thay thế cho 'os.mkdir' (và các chức năng khác) hoạt động trên' MemoryFS'. Nếu không có chức năng như vậy tồn tại, tôi sẽ phải viết của riêng tôi. –

+0

Trên thực tế có vẻ như bạn có thể gắn kết MemoryFS với cầu chì trên các hệ thống Linux và truy cập với các chức năng cổ phiếu của Python. http://www.willmcgugan.com/2010/6/20/pyfilesystem-03-released/ http://packages.python.org/fs/expose/fuse.html#module-fs.expose.fuse – Epeli

+0

Cầu chì điều thực sự tuyệt vời, nhưng thực tế nó không phải là nền tảng chéo là một vấn đề. Ngoài ra, một số trong số đó là giấy phép GPL có thể là một vấn đề. –

4

Vì việc xử lý tệp và thư mục quá thấp và phụ thuộc vào hệ điều hành, tôi nghi ngờ bất cứ điều gì giống như những gì bạn muốn tồn tại (hoặc thậm chí có thể). Đặt cược tốt nhất của bạn có thể là triển khai tập hợp các hàm, lớp và phương thức giống như hệ thống tệp ảo, theo dõi các tệp và hệ thống phân cấp thư mục được tạo và nội dung của chúng.

Các cuộc gọi trong mô phỏng như vậy sẽ cần phải có chữ ký giống nhau và trả lại cùng một giá trị làm đối tác của chúng trong các chuẩn xây dựng và mô-đun chuẩn khác nhau của Python.

Tôi nghi ngờ điều này có thể không hoạt động nhiều như âm thanh - mô phỏng giao diện hệ thống tệp chuẩn của Python - tùy thuộc vào số lượng bạn đang sử dụng vì bạn không nhất thiết phải bắt chước tất cả nó. Ngoài ra, nếu được viết bằng Python thuần túy ™, nó cũng sẽ có thể di động và dễ bảo trì và nâng cao.

+2

có các mô-đun python như [fs] (http://pypi.python.org/pypi/fs/0.3.0) thực hiện gần như vậy nhưng bởi vì rất khó để gói os chúng cung cấp giao diện riêng của chúng không phù hợp nhưng có tất cả các hoạt động như các phương thức trên một đối tượng –

+0

Bạn nói đúng, tôi đã hiểu sai đề xuất của bạn. Đã xóa nhận xét trước của tôi ngay bây giờ để ngăn không cho người khác nhầm lẫn. –

1

Một lựa chọn có thể là để tiêm (vá khỉ) phiên bản sửa đổi của các phương pháp được sử dụng trong các mô-đun os cũng như builtins openfile mà viết thư cho StringIO file thay vì vào đĩa. Rõ ràng sự thay thế này chỉ xảy ra đối với mô-đun đang được thử nghiệm;

+0

Đối với trường hợp của tôi nó sẽ không giúp đỡ, kể từ khi kịch bản của tôi tạo ra các thư mục. –

+0

Bạn có thể bọc 'os.mkdir' theo cách tương tự. – SingleNegationElimination

+0

Thú vị ... Và làm cách nào tôi "ảo hóa" 'os.mkdir'? –

-6

Xin vui lòng đọc này:

http://docs.python.org/library/tempfile.html#tempfile.TemporaryFile

"Return một đối tượng tập tin như vậy có thể sử dụng như một khu vực lưu trữ tạm thời các tập tin được tạo ra sử dụng mkstemp() Nó sẽ.. bị phá hủy ngay sau khi nó được đóng (bao gồm cả một đóng ngụ ý khi đối tượng là rác được thu thập). "

Tất cả đều được xử lý cho bạn. Không làm gì cả và nó đã hoạt động.

+1

Như tôi đã nói trong câu hỏi, tôi cần phải tạo các thư mục, không chỉ các tệp. Từ liên kết của bạn: "Người dùng' mkdtemp() 'chịu trách nhiệm xóa thư mục tạm thời và nội dung của nó khi được thực hiện với nó." –

Các vấn đề liên quan