我在Windows 2003服务器上运行python2.5脚本作为服务。 我得到这个简单的打印statings错误:
IOError: (9, 'Bad file descriptor')
我删除了所有的打印语句,因为它们仅用于开发目的,但我不确定为什么打印语句会导致我任何greif。 我运行相同的脚本,而不是没有任何重大问题的服务。 只是想知道是否有其他人有任何见解?
您不能打印,因为sys.stdout
不作为控制台会话运行时不可用。
您可以考虑使用logging
模块,而不是使用print
语句,以便设置logging
级别并将所有关键事项写入系统事件日志。
应该指出的是,你仍然可以通过这样做来实现它(或者默默地忽略这个问题):
要写入每个输出流的文件:
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中,这是预期的行为。 在这个错误报告中 ,Christian Heimes解释说这是一个设计决定:
我建议不要在Python 2.7发行版周期中更改代码。 行为的改变太混乱了。 这不是一个错误,而是一个设计决定。 五年前,我实现了与Python 3.0的操作系统的IO交互的一部分。 我故意没有将端口修改为2.6。
他还建议在Python 2.7中获得Python 3.x样式的print()
行为的解决方法:
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.")