Мне нужно обновить файл. Я прочитал его и записал с изменениями. Тем не менее, я бы предпочел написать во временный файл и переименовать его на место.
temp = tempfile.NamedTemporaryFile()
tempname = temp.name
temp.write(new_data)
temp.close()
os.rename(tempname, data_file_name)
Проблема заключается в том, что tempfile.NamedTemporaryFile()
делает временный файл в /tmp
другой файловой системой. Это означает, что os.rename()
терпит неудачу. Если я использую shlib.move()
вместо этого, у меня нет атомарного обновления, которое предоставляет "mv" (для файлов в той же файловой системе, yadda, yadda и т.д.)
Я знаю, что tempfile.NamedTemporaryFile()
принимает параметр "dir", но имя_данных_файла может быть "foo.txt", в этом случае dir = '.'; или data_file_name может быть "/path/to/the/data/foo.txt
", в этом случае dir = "/path/to/the/data
".
Мне бы очень хотелось, чтобы временный файл был data_file_name + "некоторые случайные данные". Это будет иметь преимущество неудачи таким образом, чтобы оставить полезные подсказки.
Предложения?