====== Avviare uno script Python come servizio di sistema di Windows ====== Autore: **//Fabio Di Matteo//** \\ Ultima revisione: **// 18/12/2018 - 10:09 //** // // Il nostro script di esempio lancia un banale webserver all'indirizzo http://localhost:8081 . ===== Primo metodo- creare un eseguibile che lancia Python con il nostro script ===== **httpd.py** #!/usr/bin/env python3 from http.server import BaseHTTPRequestHandler, HTTPServer # HTTPRequestHandler class class testHTTPServer_RequestHandler(BaseHTTPRequestHandler): # GET def do_GET(self): # Send response status code self.send_response(200) # Send headers self.send_header('Content-type','text/html') self.end_headers() # Send message back to client message = "Hello world from python service!" # Write content as utf-8 data self.wfile.write(bytes(message, "utf8")) return def run(): print('starting server...') # Server settings # Choose port 8080, for port 80, which is normally used for a http server, you need root access server_address = ('127.0.0.1', 8081) httpd = HTTPServer(server_address, testHTTPServer_RequestHandler) print('running server...') httpd.serve_forever() run() Lo script deve essere lanciato da un eseguibile nativo, altrimenti non funziona (Testato su Windows7). Dunque creiamo il nostro lanciatore : #include #include int main(int argc, char** argv) { system("C:\\msys64\\mingw64\\bin\\python3.exe c:\\httpd.py"); return 0; } Compiliamo il nostro lanciatore . Io uso msys2 su Windows: gcc myservice.c -o PythonApp.exe Posizioniamo per comodita' i due file (httpd.py e PythonApp.exe) in C:\ Fatto cio' non ci resta altro che avviare un terminale di windows (cmd.exe) come amministratore e impartire il seguente comando: sc create PythonApp binPath= "C:\PythonApp.exe" displayname= "Python http example" depend= tcpip start= auto Se volessimo eliminare il servizio: sc delete PythonApp **E' necessario riavviare il sistema per far partire il servizio.** ===== Secondo metodo- usando il programma libero nssm ===== Scarichiamo [[https://nssm.cc/|nssm]], un piccolo eseguibile che non richiede installazione e impartiamo i seguenti comandi **da amministratore**: nssm.exe install PythonApp "C:\Program Files\Python37\python.exe" "C:\Users\Admin\Desktop\webserver.py" possiamo poi avviare il servizio con : nssm.exe start PythonApp oppure modificarlo (Gui): nssm.exe edit PythonApp o eliminarlo: nssm.exe remove PythonApp