почему я получаю ошибку IOError: (9, «Bad file descriptor») при создании заявлений на печать?

Я запускаю сценарий python2.5 на сервере Windows 2003 в качестве службы. Я получаю эту ошибку для простых заявлений печати:

IOError: (9, 'Bad file descriptor') 

Я удалил все операторы печати, потому что они использовались только для целей разработки, но я не уверен, почему заявление печати вызовет у меня какой-либо greif. Я запускал один и тот же сценарий не как сервис без каких-либо серьезных проблем. Просто интересно, есть ли у кого-нибудь еще какое-либо понимание?

2 Solutions collect form web for “почему я получаю ошибку IOError: (9, «Bad file descriptor») при создании заявлений на печать?”

Вы не можете печатать, потому что sys.stdout недоступен, если не работает в качестве сеанса консоли.

Вместо использования операторов print вы можете использовать модуль logging чтобы вы могли установить loglevel и записать все критические вещи в журнал системных событий.


Следует отметить, что вы все равно можете заставить его работать (или молча игнорировать проблему), делая что-то вроде этого:

Чтобы записать файл в поток вывода:

 import sys sys.stdout = open('stdout.txt', 'w') sys.stderr = open('stderr.txt', 'w') 

Чтобы записать в один файл:

 import sys sys.stdout = sys.stderr = open('output.txt', 'w') 

Или молча игнорировать все заявления печати:

 import sys class NullWriter(object): def write(self, value): pass sys.stdout = sys.stderr = NullWriter() 

В Python 2.x это ожидаемое поведение. В этом отчете об ошибке Христиан Хеймс объясняет, что это дизайнерское решение:

Я рекомендую не менять код так поздно в выпуске Python 2.7. Изменение поведения слишком запутанно. И это не ошибка, а дизайнерское решение. Более пяти лет назад я реализую части взаимодействия IO с операционной системой для Python 3.0. Я намеренно НЕ модифицировал порты версии 2.6.

Он также рекомендует обходной путь для получения поведения print() Python 3.x в Python 2.7:

 from __future__ import print_function import sys if sys.executable.endswith("pythonw.exe"): sys.stdout = sys.stdout = None print("can handle sys.stdout = None just fine.") 
  • Создайте окно tkinter python без кнопки X (закрыть)
  • Как установить leptonica + tesseract на Windows без Visual Studio для использования в Anaconda?
  • запускать скрипт python в качестве администратора при запуске в Windows 10
  • Обновление корневого Python от Anaconda до более младшей версии на Windows ничего не делает
  • Python: Как я могу сделать escape-коды ANSI работать и в Windows?
  • PIPON PIP имеет проблемы с путём для MS Visual Studio 2010 Express для 64-разрядной установки на Windows 7
  • PyInstaller: исполняемый файл с одним файлом не запускается
  • Переподготовка Tensorflow в Windows
  • Python - лучший язык программирования в мире.