Удаление временных файлов во время оценки скрипта

Я использую пакет Python, cdo, который сильно зависит от tempfile для хранения промежуточных результатов. Созданные временные файлы довольно большие, и при выполнении больших вычислений я столкнулся с проблемой, что каталог /tmp был заполнен, и скрипт завершился ошибкой disk full (мы говорим о 10–100 ГБ). Я нашел решение проблемы, создав локальную папку, скажем, $HOME/tmp, а затем выполнив

import tempfile
tempfile.tempdir='$HOME/tmp'

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


person Thomas Kühn    schedule 21.06.2017    source источник
comment
Просто используйте модуль tempfile, описанный в stackoverflow.com/questions/21257782/ Он автоматически удалит временные файлы, когда файл будет закрыт.   -  person MeterLongCat    schedule 21.06.2017
comment
@MeterLongCat Как указано в вопросе, cdo использует tempfile, и мне нужно удалить до завершения скрипта. К сожалению, я не могу контролировать параметры, которые cdo передает экземплярам TemporaryFile() при создании.   -  person Thomas Kühn    schedule 21.06.2017


Ответы (1)


как показывают примеры: вы можете использовать tempfile в диспетчере контекста:

with tempfile.TemporaryFile() as fp:
    fp.write(b'Hello world!')
    fp.seek(0)
    fp.read()

таким образом они удаляются при выходе из контекста.

...у вас есть такой контроль над тем, как cdo использует временные файлы?

person hiro protagonist    schedule 21.06.2017
comment
К сожалению, у меня нет такого контроля, но пример в любом случае хорош. - person Thomas Kühn; 21.06.2017
comment
...Извини за это! - person hiro protagonist; 21.06.2017