Мне нужно обновить файл. Я прочитал это в и выписал это с изменениями. Однако я предпочел бы записать во временный файл и переименовать его на место.
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", но data_file_name может быть "foo.txt", в этом случае dir = '.'; или data_file_name может быть "/path/to/the/data/foo.txt
", в этом случае dir = "/path/to/the/data
".
Что мне действительно нужно, так это чтобы временный файл был data_file_name + «некоторые случайные данные». Это принесло бы пользу неудачи таким образом, что оставило бы после себя полезные подсказки.
Предложения