Что может привести к «IOError: [Errno 9] Bad file descriptor» во время os.system ()? - PullRequest
47 голосов
/ 07 октября 2011

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

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

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

Мои вопросы сейчас:

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

Ответы [ 2 ]

40 голосов
/ 07 октября 2011

Вы получаете это сообщение об ошибке, если файл 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() является источником ошибки. Может быть, вы могли бы показать немного больше кода?

14 голосов
/ 30 ноября 2015

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...