I want to reproduce the same result as Windows Services in Python :
import win32service
import win32serviceutil
import win32event
class PySvc(win32serviceutil.ServiceFramework):
# you can NET START/STOP the service by the following name
_svc_name_ = "PySvc"
# this text shows up as the service name in the Service
# Control Manager (SCM)
_svc_display_name_ = "Python Test Service"
# this text shows up as the description in the SCM
_svc_description_ = "This service writes stuff to a file"
def __init__(self, args):
win32serviceutil.ServiceFramework.__init__(self,args)
# create an event to listen for stop requests on
self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
# core logic of the service
def SvcDoRun(self):
import servicemanager
print 'hello'
f = open('test.dat', 'w+')
rc = None
# if the stop event hasn't been fired keep looping
while rc != win32event.WAIT_OBJECT_0:
f.write('TEST DATA\n')
f.flush()
# block for 5 seconds and listen for a stop event
rc = win32event.WaitForSingleObject(self.hWaitStop, 5000)
f.write('SHUTTING DOWN\n')
f.close()
# called when we're being shut down
def SvcStop(self):
# tell the SCM we're shutting down
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
# fire the stop event
win32event.SetEvent(self.hWaitStop)
if __name__ == '__main__':
win32serviceutil.HandleCommandLine(PySvc)
In the cmd
administrator mode,I type these commands,it works good.And telling me Python Test Service
start.
python.exe .\\PySvc.py install
NET START PySvc
But the file test.dat
isn't been created.So how to make the program into SvcDoRun
function?
Converting Comment to Answer...
Try using a full path for the test.dat file (C:\\servicedata\\test,dat). The path when you run in the interperter is different from when you run as a service.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.