Ric*_*ard 20 python windows service
我在Windows 2003服务器上运行python2.5脚本作为服务.我收到此错误的简单打印声明:
IOError: (9, 'Bad file descriptor')
Run Code Online (Sandbox Code Playgroud)
我删除了所有的print语句,因为它们仅用于开发目的,但我不确定为什么print语句会导致我任何greif.我运行相同的脚本而不是服务而没有任何重大问题.只是想知道其他人是否有任何见解?
Wol*_*lph 28
您无法打印,因为sys.stdout在未作为控制台会话运行时不可用.
print您可以考虑使用该logging模块而不是使用语句,以便设置日志级别并将所有关键事项写入系统事件日志.
应该注意的是,您仍然可以通过执行以下操作来使其工作(或者默默地忽略该问题):
要为每个输出流写入文件:
import sys
sys.stdout = open('stdout.txt', 'w')
sys.stderr = open('stderr.txt', 'w')
Run Code Online (Sandbox Code Playgroud)
要写入单个文件:
import sys
sys.stdout = sys.stderr = open('output.txt', 'w')
Run Code Online (Sandbox Code Playgroud)
或者默默地忽略所有打印语句:
import sys
class NullWriter(object):
def write(self, value): pass
sys.stdout = sys.stderr = NullWriter()
Run Code Online (Sandbox Code Playgroud)
小智 5
在 Python 2.x 中,这是预期的行为。在这个错误报告中,Christian Heimes 解释说这是一个设计决定:
我建议不要在 Python 2.7 发布周期的这么晚才更改代码。行为的改变太令人困惑了。而且这也不是错误,而是设计决策。五年多前,我为 Python 3.0 实现了与操作系统的部分 IO 交互。我故意没有将修改移植到 2.6。
他还推荐了一种print()在 Python 2.7 中获得 Python 3.x 风格行为的解决方法:
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.")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14921 次 |
| 最近记录: |