是否可以使用Python编写Windows服务?

gri*_*yvp 5 python windows

Python有一个win32service似乎允许创建Windows服务的包.我仔细检查了可用的google示例,例如这一个: 是否可以在Windows中将Python脚本作为服务运行?如果可能,怎么样?

我已~/Documents/test.py在提升的命令提示符下放入代码并执行以下操作:

> python test.py install
> python test.py debug
Run Code Online (Sandbox Code Playgroud)

不幸的是,我尝试的每个例子都失败了,错

Debugging service TestService - press Ctrl+C to stop.
Error 0xC0000005 - Python could find the service class in the module

AttributeError: 'module' object has no attribute 'AppServerSvc'

(null): (null)
Run Code Online (Sandbox Code Playgroud)

我在Windows 7 64位和Windows 8 64位上测试了最新版本的ActivePython(2.7.2.5 32位).当然,如果通过服务管理器手动启动服务,它也不会启动.

我做错了什么或者Python不打算用于现代操作系统上的服务创建?也许我需要特定版本的windows/python/pywin32?当然,我可以手动测试从Windows XP开始的所有组合,但这将需要很多时间:(.也许有人已经有Python和Windows服务的经验,并可以暗示我做错了什么?

更新

在Windows XP 32位虚拟macine上测试(相同的代码,相同的activepython发行版) - 同样的错误.

小智 1

PyWin32 的 ActiveState 构建中似乎存在错误。安装 ActiveState python 2.7.2.5 并运行上面链接的示例代码,我得到与您报告的相同的错误。

但是如果我下载Python 2.7.3(2.7.2.5似乎无法下载)并添加PyWin32 build 214(ActiveState似乎使用214版本的PyWin32)。然后一切似乎都很顺利。我还尝试了最新版本的 PyWin32 (218),它也工作正常。

所以我想你可以尝试向 ActiveState 报告问题(我没有与他们签订支持合同),除非你有使用 ActiveState 的要求,否则你可以切换到标准 Python 版本。

多年来,我一直使用标准 Python 构建的服务,在从 Windows 2000 到 Server 2008 和 Windows 7 的所有设备上运行,没有出现任何问题。所以我有充分的理由相信它也适合你。

如果您想使用 ActiveState 来解决问题,那么该错误似乎出现在他们构建的 PythonService.cpp 的 LoadPythonServiceInstance 函数中。我查看了创建的注册表项,它们看起来很好,这是 PythonService.exe 无法加载您的类。根据错误消息,它似乎已正确加载模块,只是在查找类时遇到问题。