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

时间:2012-11-01 10:30:42

标签: python windows

Python有一个win32service包似乎允许创建Windows服务。我仔细检查过可用的google示例,例如: Is it possible to run a Python script as a service in Windows? If possible, how?

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

> python test.py install
> python test.py debug

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

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)

我已经在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 个答案:

答案 0 :(得分: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来解决问题,那么错误似乎出现在LoadPythonServiceInstance函数中的PythonService.cpp构建中。我查看了创建的注册表项,它们看起来很好,是在加载您的类时失败的PythonService.exe。根据错误消息,它似乎已正确加载模块,并且无法找到该类。