Ответ 1
Смотрите модуль tempfile в стандартной библиотеке - все должно быть.
(Я использую Python 2.6 и nose
.)
Я пишу тесты для своего приложения Python. Я хочу, чтобы один тест открыл новый файл, закроет его и удалит. Естественно, я предпочитаю, чтобы это происходило во временном каталоге, потому что я не хочу уничтожать файловую систему пользователя. И это должно быть кросс-OS.
Как мне это сделать?
Смотрите модуль 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