Как я могу создать виртуальный диск в Python?

Я хочу создать виртуальный диск в Python. Я хочу сделать это кроссплатформенным способом, чтобы он работал на Windows XP-to-7, Mac и Linux. Я хочу иметь возможность чтения / записи на виртуальный диск, как будто это обычный диск, предпочтительно с буквой / путем к диску.

Причина, по которой я хочу, это написать тесты для скрипта, который создает каталог с определенной структурой. Я хочу полностью создать каталог на виртуальном диске, так что я буду уверен, что он будет полностью удален после завершения тестов. Я подумал об использовании Python tempfile, но если тест будет остановлен в середине, каталог может быть не удален. Я хочу быть полностью уверен, что он удален, даже если кто-то потянет за вилку компьютера в середине теста.

4 ответа

Решение

Как насчет PyFilesystem?

http://docs.pyfilesystem.org/en/latest/memoryfs.html

http://docs.pyfilesystem.org/en/latest/tempfs.html

Недостатком является то, что вам нужно получить доступ к файловой системе с помощью API PyFilesystem, но вы также можете получить доступ к реальным файлам с помощью PyFilesystem.

Поскольку обработка файлов и каталогов является настолько низкоуровневой и зависит от ОС, я сомневаюсь, что что-то вроде того, что вы хотите, существует (или даже возможно). Лучше всего было бы реализовать "виртуальный" набор функций, классов и методов, подобных файловой системе, которые отслеживают созданные файлы и иерархию каталогов и их содержимое.

Вызываемые элементы в такой эмуляции должны иметь одинаковую сигнатуру и возвращать те же значения, что и их аналоги в различных стандартных встроенных модулях и модулях Python, используемых вашим приложением.

Я подозреваю, что это может быть не так много работы, как кажется - эмуляция стандартного интерфейса файловой системы Python - в зависимости от того, какую часть вы на самом деле используете, так как вам не обязательно имитировать все это. Кроме того, если он написан на Pure Python™, он также будет переносимым и простым в обслуживании и улучшении.

Один из вариантов может заключаться в том, чтобы внедрить (monkey patch) измененные версии методов, используемых в os модуль, а также встроенные open а также file что пишите StringIO файлы вместо диска. Очевидно, эта замена должна происходить только для тестируемого модуля;

Пожалуйста прочтите это:

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

"Вернуть файлоподобный объект, который можно использовать как область временного хранения. Файл создается с помощью mkstemp(). Он будет уничтожен, как только будет закрыт (включая неявное закрытие, когда объект собирается сборщиком мусора)".

Это все для вас. Ничего не делать, и это уже работает.

Другие вопросы по тегам