2012-11-01 40 views
5

Python有一個win32service包似乎允許創建Windows服務。我已經仔細地檢查可用的谷歌實例,例如此一: Is it possible to run a Python script as a service in Windows? If possible, how?是否有可能使用Python編寫Windows服務?

我已經把代碼放入~/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服務的經驗,並可以暗示我在做什麼錯了嗎?

update

測試在Windows XP 32位虛擬MACINE(相同的代碼,同一ActivePython分發) - 同樣的錯誤

+3

我幾乎可以肯定你得到的錯誤是一個與模塊位置有關的微不足道的編碼錯誤。請發佈初始化「AppServerSvc」的代碼[可重現的示例](http://sscce.org)。此外,標題的明顯答案是肯定的,你甚至鏈接到重複。 – phihag

+0

@phihag我發佈了用於重現問題的命令行,以及與操作系統版本一起完整的源代碼。 「可重現的例子」需要哪些其他信息? – grigoryvp

+0

一個可重複的例子是任何人都可以運行的完整代碼,*重現*你的問題(即足夠的代碼,以便* I *可以鍵入'python test.py debug')。在你的情況下,它至少是'test.py',加上你存儲已定義的'class AppServerSvc'的文件。 – phihag

回答

1

看來,有在ActiveState的建立PyWin32錯誤安裝的ActiveState的Python 2.7.2.5。並運行上面的鏈接示例代碼,我會得到與您報告相同的錯誤。

但是,如果我下載Python 2.7.3(2.7.2.5似乎無法下載)並添加PyWin32 build 214(ActiveState似乎使用PyWin32的214版本)。然後,一切似乎工作得很好。我也嘗試過PyWin32的最新版本(218),它也正常工作。

所以我想你可以嘗試向ActiveState報告問題(我沒有與他們的支持合同),除非你有使用ActiveState的要求,你可以切換到標準的Python構建。

我一直在使用標準Python版本的服務多年運行於從Windows 2000到Server 2008和Windows 7的所有應用程序中,沒有任何問題。所以我有充分的理由相信它也適用於你。

如果您想使用ActiveState來解決問題,那麼該錯誤似乎在LoadPythonServiceInstance函數的PythonService.cpp版本中。我查看了創建的註冊表項,它們看起來很好,它是PythonService.exe在加載類時失敗。根據錯誤信息,它似乎已經正確加載了模塊,並且在找到課程時遇到了麻煩。

+0

可否請您告訴我是否可以在Windows服務中使用multiprocessing.Manager()?我有很多問題正在進行多處理工作。 –

+0

它應該是可能的,但我沒有任何與多處理Windows下的個人經驗。我敢肯定,如果你提出一個新問題,詳細說明你正在努力完成什麼,我們(社區)可以提供幫助。 – JimP

相關問題