Что может привести к" IOError: [Errno 9] плохой файловый дескриптор " во время ОС.system()?
Я использую научное программное обеспечение, включая скрипт Python, который вызывает os.system()
который используется для запуска другой научной программы. Во время выполнения подпроцесса Python в какой-то момент печатает следующее:
close failed in file object destructor:
IOError: [Errno 9] Bad file descriptor
Я считаю, что это сообщение печатается одновременно с os.system()
возвращает.
теперь мои вопросы:
какие условия могут привести к такому типу IOError? Что именно это значит? Что это означает для подпроцесса это было вызвано os.system()
?
2 ответов
вы получаете это сообщение об ошибке, если файл Python был закрыт "снаружи", то есть не из close()
способ:
>>> f = open(".bashrc")
>>> os.close(f.fileno())
>>> del f
close failed in file object destructor:
IOError: [Errno 9] Bad file descriptor
строку del f
удаляет последнюю ссылку на файловый объект, вызывая его деструктор file.__del__
называться. Внутреннее состояние объекта file указывает, что файл все еще открыт, так как f.close()
никогда не вызывался, поэтому деструктор пытается закрыть файл. Впоследствии ОС выдает ошибку из-за попытки закрыть файл это не открыто.
с осуществлением os.system()
не создает никаких объектов файлов Python, кажется маловероятным, что system()
вызов является источником ошибки. Может, покажешь еще немного кода?
вы можете получить эту ошибку, если вы используете неправильный режим при открытии файла. Например:
with open(output, 'wb') as output_file:
print output_file.read()
в этом коде я хочу прочитать файл, но я использую mode wb
вместо r
или r+