我正在一个Windows 2003服务器上以服务的形式运行一个Python2.5脚本。对于简单的打印语句,我遇到了以下错误:
IOError: (9, 'Bad file descriptor')
我删除了所有的打印语句,因为它们只是用于开发目的,但我不确定为什么打印语句会给我带来麻烦。我以非服务方式运行了相同的脚本,没有遇到任何重大问题。只是想知道是否有人有任何见解?
当不运行控制台会话时,sys.stdout
不可用,因此无法打印。
可以考虑使用 logging
模块代替 print
语句,这样可以设置日志级别并将所有关键信息写入系统事件日志。
值得注意的是,您仍然可以通过执行以下操作来使其正常工作(或静默忽略该问题):
要按每个输出流写入文件:
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.7中获得类似于Python 3.x的我建议不要在Python 2.7发布周期如此之晚更改代码。行为的变化太令人困惑。而且这并不是一个错误,而是一个设计决策。五年多以前,我为Python 3.0实现了部分与操作系统的IO交互。我有意没有将修改移植到2.6。
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.")
sys.stdout = open(os.devnull, 'w')
- Brendan Abelprint
调用)之前失败,总是在同一个打印调用处,出现这个错误。 - SuperBiasedMan