Hello, I'm trying to run a Python script as a Windows service with a defined shutdown. The script (enigma-client.py) handles the communications with the server in a distributed computing effort and calls a C program (enigma.exe) to do the computations.
enigma.exe should save its current state when receiving SIGINT or SIGTERM. This (obviously) works under Unix and also when running the script from the Windows command line and terminating it with Ctrl-C. I understand that for a clean shutdown of a Windows service one would have to use the win32 extensions and have the working thread check for the shutdown event in short intervals (<[EMAIL PROTECTED]>). This would leave me with these options: a) Write enigma-client.py as a service. Write enigma.exe as a service and have it poll regularly for shutdown events. b) Have enigma.exe save its state regularly, use srvany.exe and forget about a graceful shutdown. I'm new to Windows services, so I'd be grateful for corrections or better solutions. Here is relevant part of the code (The whole thing is at http://www.bytereef.org/enigma-client.txt ): """ main """ cmdline = 'enigma.exe -R 00trigr.naval 00bigr.naval 00ciphertext > NUL' eclient = Eclient() if len(sys.argv) != 3: eclient.usage() if os.path.isfile(LOCKFILE): print "enigma-client: error: found lockfile %s. \n" \ "Check that no other enigma-client process is using this directory." \ % LOCKFILE sys.exit(1) atexit.register(eclient.rm_lockfile) eclient.touch_lockfile() win32process.SetPriorityClass( win32process.GetCurrentProcess(), win32process.IDLE_PRIORITY_CLASS ) while 1: retval = os.system(cmdline) >> 8 if retval == 0: eclient.submit_chunk(sys.argv[1], int(sys.argv[2])) eclient.get_chunk(sys.argv[1], int(sys.argv[2])) elif retval == 1: eclient.get_chunk(sys.argv[1], int(sys.argv[2])) time.sleep(10) else: """./enigma has caught a signal""" sys.exit(retval) Stefan Krah -- Break original Enigma messages: http://www.bytereef.org/m4_project.html -- http://mail.python.org/mailman/listinfo/python-list