Как создать ramdisk в Python?
Я хочу создать ramdisk в Python. Я хочу иметь возможность сделать это кросс-платформенным способом, поэтому он будет работать на Windows XP-to-7, Mac и Linux. Я хочу иметь возможность читать/записывать в ramdisk, как обычный диск, желательно с буквой/дорожкой диска.
Причина, по которой я хочу это, - написать тесты для script, который создает каталог с определенной структурой. Я хочу полностью создать каталог в ramdisk, поэтому я буду уверен, что он будет полностью удален после завершения тестов. Я рассматривал использование Python tempfile
, но если тест будет остановлен в середине, каталог не может быть удален. Я хочу быть уверенным, что он удалился, даже если кто-то вытащил вилку на компьютер в середине теста.
Ответы
Ответ 1
Как насчет PyFilesystem?
http://docs.pyfilesystem.org/en/latest/memoryfs.html#module-fs.memoryfs
http://docs.pyfilesystem.org/en/latest/tempfs.html#module-fs.tempfs
Недостатком является то, что вам нужно получить доступ к файловой системе с помощью API PyFilesystem, но вы также можете получить доступ к реальным fs с помощью PyFilesystem.
Ответ 2
Поскольку обработка файлов и каталогов настолько низка и зависит от ОС, я сомневаюсь, что все, что вы хотите, существует (или даже возможно). Лучше всего будет реализовать "виртуальный" набор функций, классов и методов, подобный файловой системе, который отслеживает созданные файлы и иерархию каталогов и их контент.
Вызываемые в такой эмуляции должны иметь одну и ту же подпись и возвращать одинаковые значения в качестве своих копий в различные стандартные встроенные модули Python и модули, которые использует ваше приложение.
Я подозреваю, что это может быть не так много, как кажется - эмуляция стандартного интерфейса файловой системы Python - в зависимости от того, сколько из них вы используете, поскольку вам не обязательно будет имитировать все это, Кроме того, если он написан на Pure Python ™, он также будет переносимым и простым в обслуживании и улучшении.
Ответ 3
Один из вариантов может заключаться в модификации модифицированных версий методов, используемых в модуле os
, а также встроенных open
и file
, которые записывают файлы StringIO
вместо диска. Очевидно, что эта замена должна выполняться только для тестируемого модуля;
Ответ 4
Прочтите это:
http://docs.python.org/library/tempfile.html#tempfile.TemporaryFile
"Возвращает файл-подобный объект, который может быть используется как область временного хранения. файл создается с помощью mkstemp(). Это будут уничтожены, как только закрыто (включая неявное закрытие когда объект является мусором собраны)".
Все это для вас. Ничего не делайте, и он уже работает.