Я не могу понять, что я делаю неправильно.Я запускаю несколько тестов и записываю результаты в файл.Часть кода, которая записывает в файл, выглядит следующим образом (в классе с именем Tester):
@staticmethod
def printHeader(resultsFileName):
if not os.path.isfile(resultsFileName):
# The file does not exist, thus
# we need to print the header
# Opens the results file
with open(resultsFileName,"a") as file:
# Prints the header
file.write("A long header")
@staticmethod
def printResults(resultsFileName,otherArguments):
# Prints the header if it does not exist
Tester.printHeader(resultsFileName)
# Prints the results
with open(resultsFileName,"a") as file:
file.write(otherArguments)
Иногда я получаю эту ошибку:
Traceback (most recent call last):
File "main.py", line 74, in <module>
File "tester.py", line 88, in methodOne
File "tester.py", line 441, in printResults
File "tester.py", line 428, in printHeader
IOError: [Errno 13] Permission denied: 'results.txt'
, в то время как в других случаях она выполняетсяплавно.Я не могу понять, где проблема.Есть идеи?
NOTE1 : У меня есть разрешение rwx
на каталог, в который записан файл. NOTE2 : ошибка возникает после того, как несколько строк результатов уже записаны.Таким образом, это происходит, когда код проверяет, должен ли печататься заголовок или нет (но он не должен печатать его, поскольку файл существует).
ОБНОВЛЕНИЕ 1 :
Как и предполагалось, я изменил свой код, чтобы избежать многократного открытия и закрытия файла.Теперь он пишет все в одном кадре.Это обновленный код:
@staticmethod
def printResults(resultsFileName,otherArguments):
# Prints the header if it does not exist
if not os.path.exists(resultsFileName):
# The file does not exist, thus
# we need to print the header
# Opens the results file
# HERE IS WHERE ERRNO 13 HAPPENS
# STRANGELY, THE FILE DOES EXIST
# AS SEVERAL LINES OF RESULTS
# HAVE ALREADY BEEN WRITTEN
with open(resultsFileName,"w") as file:
# Prints the header
file.write("A suitable header")
# Prints the results
file.write(otherArguments)
else:
# Prints the results
with open(resultsFileName,"a") as file:
file.write(otherArguments)
Кажется, что os.path.exists()
в какой-то момент возвращает FALSE
, даже если файл существует.Возможно, что-то отозвало мне разрешение на запись (возможно, файл неправильно закрыт после записи?).
В объяснении os.path.exists()
говорится, что:
На некоторых платформах эта функция может возвращать False, если не предоставлено разрешение на выполнение os.stat () для запрошенного файла,даже если путь физически существует.
ОБНОВЛЕНИЕ 2
Я изменил свой код на следующий, чтобы избежать os.path.isfile()
:
# Opens the results file
with open(resultsFileName,"a") as file:
if file.tell() == 0:
# Prints the header
file.write("Header")
# Prints the results
file.write(otherArguments)
file.close()
else:
# Prints the results
file.write(otherArguments)
file.close()
Тем не менее, ERRNO 13 происходит в with open(resultsFileName,"a") as file:
.У меня есть права доступа rw
как к папке, так и к файлу, на котором написано несколько строк, прежде чем произойдет ошибка.ОС Linux.