Python: Как сделать временные файлы в моем наборе тестов?

(Я использую Python 2.6 и nose .)

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

Как мне это сделать?

3 Solutions collect form web for “Python: Как сделать временные файлы в моем наборе тестов?”

См. Модуль tempfile в стандартной библиотеке – должно быть все, что вам нужно.

FWIW, используя py.test, вы можете написать:

 def test_function(tmpdir): # tmpdir is a unique-per-test-function invocation temporary directory 

Каждая тестовая функция, использующая аргумент функции «tmpdir», получит чистый пустой каталог, созданный как вспомогательный каталог «/ tmp / pytest-NUM» (linux, win32 имеет другой путь), где NUM увеличивается для каждого тестового прогона. Последние три каталога хранятся для облегчения проверки, а старые автоматически удаляются. Вы также можете установить базовую папку temp с py.test --basetemp=mytmpdir .

Объект tmpdir – это объект py.path.local, который также может использоваться следующим образом:

 sub = tmpdir.mkdir("sub") sub.join("testfile.txt").write("content") 

Но также хорошо просто преобразовать его в «строковый» путь:

 tmpdir = str(tmpdir) 

Вместо непосредственного использования tempfile я предлагаю использовать для него оболочку диспетчера контекста – менеджер контекста позаботится об удалении каталога во всех случаях (успех / отказ / исключение), в основном без шаблона.

Вот как это можно использовать:

 from tempdir import TempDir ... # in some test: with TempDir() as d: temp_file_name = os.path.join(d.name, 'your_temp_file.name') # create file... # ... # asserts... 

Я использую домашнюю версию (реализация довольно короткая – до 20 строк) до такой степени, когда мне нужно было использовать ее где-то еще, поэтому я огляделся, если есть готовый к установке пакет, и действительно есть: tempdir

Python - лучший язык программирования в мире.