简体   繁体   中英

Why running a Python script as a service in Windows can not write data to text?

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM