2012-11-01 11 views
5

Python ha un pacchetto win32service che sembra consentire la creazione del servizio Windows. Ho accuratamente controllati disponibili esempi di Google, ad esempio questo: Is it possible to run a Python script as a service in Windows? If possible, how?È possibile scrivere un servizio Windows usando Python?

ho messo il codice in ~/Documents/test.py ed eseguito in seguito sotto il prompt dei comandi con privilegi elevati:

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

Purtroppo, ogni esempio ho provato a mancare con l'errore:

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) 

ho provato con l'ultima versione di ActivePython (2.7.2.5 32-bit) su Windows 7 a 64-bit e Windows 8 a 64 bit. Ovviamente, se il servizio viene avviato manualmente tramite il gestore servizi, non verrà avviato neanche.

Sto facendo qualcosa di sbagliato o Python non è destinato ad essere utilizzato per la creazione di servizi su sistemi operativi moderni? Forse ho bisogno di una versione specifica di Windows/Python/Pywin32? Naturalmente, posso testare manualmente tutte le combinazioni a partire da Windows XP ma ci vorrà molto tempo :(. Forse qualcuno ha già esperienza con Python e Windows e mi può suggerire cosa sto facendo male?

aggiornamento

testato su Windows XP a 32 bit macine virtuale (stesso codice, stessa distribuzione ActivePython) -. stesso errore

+3

Sono quasi certo che l'errore che si ottiene è un errore di codifica banale relativo alle posizioni dei moduli. Per favore pubblica un [esempio riproducibile] (http://sscce.org) del codice che inizializza 'AppServerSvc'. Inoltre, la risposta ovvia al titolo è sì, e puoi persino collegarti al duplicato. – phihag

+0

@phihag Ho inviato la riga di comando usata per riprodurre il problema e completare il codice sorgente insieme alla versione del sistema operativo. Quali altre informazioni pensi siano necessarie per "esempio riproducibile"? – grigoryvp

+0

Un esempio riproducibile è il codice completo che chiunque può eseguire, beh, * riproduce * il tuo problema (cioè abbastanza codice in modo che * I * possa digitare 'python test.py debug').Nel tuo caso, è almeno 'test.py', oltre al file in cui è stato memorizzato il' class AppServerSvc' definito. – phihag

risposta

1

sembra che ci sia un bug nel ActiveState costruire per PyWin32 installazione di ActiveState Python 2.7.2.5. ed eseguendo il codice di esempio collegato sopra, ricevo lo stesso errore che stai segnalando.

Ma se scarico Python 2.7.3 (2.7.2.5 non sembra essere disponibile per il download) e aggiungere PyWin32 build 214 (ActiveState sembra utilizzare la versione 214 di PyWin32). Quindi tutto sembra funzionare bene. Ho anche provato l'ultima build di PyWin32 (218) e ha funzionato correttamente.

Quindi immagino che puoi provare a segnalare il problema ad ActiveState (non ho un contratto di supporto con loro) e se non hai un requisito per usare ActiveState, puoi semplicemente passare alle build standard di Python.

Utilizzo i servizi con le versioni standard di Python da anni in esecuzione su tutto, da Windows 2000 a Server 2008 e Windows 7 senza problemi. Quindi ho buone ragioni per credere che funzionerà anche per te.

Se si desidera lavorare con ActiveState per risolvere il problema, il bug sembra essere nella loro build di PythonService.cpp nella funzione LoadPythonServiceInstance. Ho guardato le voci di registro che sono state create e sembrano a posto, è il PythonService.exe che non riesce a caricare la tua classe. Sulla base del messaggio di errore sembra che abbia caricato correttamente il modulo e stia solo avendo problemi a trovare la classe.

+0

potresti dirmi se è possibile utilizzare il multiprocessing.Manager() all'interno di un servizio di Windows? Sto avendo un certo numero di problemi nel far funzionare il multiprocessing. –

+0

Dovrebbe essere possibile, ma non ho alcuna esperienza personale sotto Windows con multiprocessing. Sono sicuro che se farai una nuova domanda con i dettagli di ciò che stai cercando di realizzare, noi (la comunità) possiamo aiutarti. – JimP

Problemi correlati