能否使用Python编写Windows服务?

5
Python有一个名为win32service的包,似乎可以允许创建Windows服务。我已经仔细查看了可用的谷歌示例,例如这个: 是否可能在Windows上将Python脚本作为服务运行? 如果可能,如何操作? 我已将代码放入~/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位虚拟机上进行了测试(相同的代码,相同的activepython分发)-出现了相同的错误。

3
我几乎可以确定你遇到的错误是一个与模块位置相关的微不足道的编码错误。请发布初始化“ AppServerSvc”的代码的可重现示例。此外,标题的显然答案是肯定的,你甚至链接到了重复的内容。 - phihag
@phihag,我发布了用于重现问题的命令行以及完整的源代码和操作系统版本。您认为还需要哪些信息才能提供“可重现的示例”? - grigoryvp
1
抱歉,我只看到一个链接,指向一个答案。这个问题只是说明你放置了(一些)代码,但我假设你将this answer的内容复制到了一个文件中。值得注意的是,你没有提到你使用了哪种EOL方案。此外,我不确定你所说的Unfortunately, every example i tried fails是包括python test.py install还是在文字输出之前的代码块。 - phihag
我认为你需要展示一些代码,特别是涉及到AppServerSvc使用的部分。 - Keith
2
展示代码,伙计!指出一个具体的、完整的例子,它在你这里失败了。你认为很明显的事情并不清楚对每个人来说都是如此,甚至可能不是真的。 - alexis
显示剩余3条评论
1个回答

1

看起来ActiveState的PyWin32版本存在一个bug。我安装了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在加载您的类时失败了。根据错误消息,它似乎已经正确加载了模块,只是在找到类方面遇到了麻烦。

请问在Windows服务中是否可以使用multiprocessing.Manager()?我在尝试使用multiprocessing时遇到了一些问题。 - Matt Seymour
这应该是可能的,但我在Windows下没有使用过多进程的个人经验。如果您提出一个新问题,并详细说明您想要实现什么,我们(社区)一定会帮助您的。 - JimP

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接