Python os.переименовать, если файловая система заполнена

#python #file-io #operating-system #filesystems

#python #file-io #операционная система #файловые системы

Вопрос:

Я спрашиваю об этом, потому что нет способа попробовать это самостоятельно (если есть, поделитесь этим, пожалуйста (:).

Я выполняю некоторую обработку файлов с помощью библиотеки Python os, в частности, перемещение / переименование файлов с помощью os.rename ().

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

Приветствую.

Комментарии:

1. Когда файловая система заполнена, все ставки отменяются. Ваше приложение на Python может аварийно завершать работу очень непонятными способами, поскольку ОС не может создавать временные файлы. Зачем спрашивать? Какую проблему вы пытаетесь решить?

2. В принципе, у меня есть каталог спула с файлами, которые мне нужно обработать, после их обработки мне нужно переместить их в каталог архива, очистив каталог спула (я не могу их удалить). Этот скрипт запускается демоном cron. Я хотел обработать полный случай файловой системы и изящно завершить работу в моем скрипте, чтобы он не делал чего-то странного.

3. Полноценная файловая система уже является чем-то странным. Хотя желательно изящное завершение работы — и, конечно же, то, для чего вам следует кодировать, — все ставки будут отменены. Ничего заслуживающего доверия не произойдет.

4. Слова из опыта! Вы правы, ситуация странная с самого начала. Спасибо за ваш быстрый ответ.

5. Ну, не все теряется, когда диск заполнен, по крайней мере, до тех пор, пока в ОС остается немного места подкачки. Я бы хотел, чтобы каждая программа, которая записывает на диск, обрабатывала полный диск несколько разумно, т. Е. Сообщала пользователю, а не просто сообщала о какой-то общей ошибке.

Ответ №1:

На практике это редко встречается, но если вы хотите протестировать, я бы рекомендовал создать небольшую файловую систему (я не знаю, на какой ОС вы работаете, но это может быть виртуальный раздел, RAM-диск, флэш-накопитель и т.д.) И загрузить его мусорными файлами, чтобы посмотреть, что произойдет. Возможно, что-то вроде этого:

 aBigNumber = 100000000000000000000000000000000
counter = 0
while (True):
    counter  = 1
    anotherFile = open(`counter`   ".txt", "wb")
    anotherFile.write("0" * aBigNumber)
    anotherFile.close()
  

Когда вы получаете исключение, вы должны быть в состоянии убедиться, что диск заполнен, и тогда вы будете знать, какого рода ошибки ожидать.

Комментарии:

1. 1: Умный. Обратите внимание, что заполнение раздела «var» или «tmp» операционной системы может иметь катастрофические последствия. Вы не должны ожидать этой ошибки. Это единственный способ диагностировать заполненность файловой системы. Поскольку ОС, скорее всего, выйдет из строя, велика вероятность, что вместо этой ошибки произойдет что-то странное (и невоспроизводимое).

2. Собираюсь попробовать. Я вернусь с ответом. Спасибо, приятель.

3. Кстати, раздел не является системным разделом, таким как «var», он используется только как хранилище.

Ответ №2:

Вы можете протестировать это, заполнив небольшой раздел, а затем попробовать файловые операции с заполненной файловой системой. В системах * nix вы можете смонтировать tmpfs; для Windows, возможно, используйте USB-накопитель.