Как я могу создать виртуальный диск в Python? - PullRequest
35 голосов
/ 04 декабря 2010

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

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

Ответы [ 4 ]

14 голосов
/ 04 декабря 2010

Как насчет 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, но вы также можете получить доступ к реальным файлам с помощью PyFilesystem.

4 голосов
/ 04 декабря 2010

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

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

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

1 голос
/ 04 декабря 2010

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

0 голосов
/ 04 декабря 2010

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

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

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

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

...