Подтвердить что ты не робот

Что может привести к "IOError: [Errno 9] Плохой дескриптор файла" во время os.system()?

Я использую научное программное обеспечение, включая Python script, который вызывает os.system(), который используется для запуска другой научной программы. Пока подпроцесс запущен, Python в какой-то момент печатает следующее:

close failed in file object destructor:
IOError: [Errno 9] Bad file descriptor

Я считаю, что это сообщение печатается одновременно с возвратом os.system().

Теперь мои вопросы:

Какие условия могут привести к этому типу IOError? Что это значит? Что это значит для подпроцесса, который был вызван os.system()?

4b9b3361

Ответ 1

Вы получите это сообщение об ошибке, если файл 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__. Внутреннее состояние файлового объекта указывает, что файл все еще открыт, так как f.close() никогда не вызывался, поэтому деструктор пытается закрыть файл. ОС впоследствии выдает ошибку из-за попытки закрыть файл, который не открывается.

Так как реализация os.system() не создает никаких файловых объектов Python, похоже, что вызов system() является источником ошибки. Может быть, вы могли бы показать немного больше кода?

Ответ 2

Вы можете получить эту ошибку, если используете неправильный режим при открытии файла. Например:

    with open(output, 'wb') as output_file:
        print output_file.read()

В этом коде я хочу прочитать файл, но я использую режим wb вместо r или r+