将一个python程序改写成一个windows服务
importwin32serviceutilimportwin32serviceimportwin32eventclasswin32test(win32serviceut...
import win32serviceutil
import win32service
import win32event
class win32test(win32serviceutil.ServiceFramework):
_svc_name_ = "Python Win32 Service"
_svc_display_name_ = "Python Win32 Service"
_svc_description_ = "Just for a demo, do nothing."
def __init__(self, args):
win32serviceutil.ServiceFramework.__init__(self, args)
self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
def SvcDoRun(self):
win32event.WaitForSingleObject(self.hWaitStop, win32event.INFINITE)
def SvcStop(self):
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
win32event.SetEvent(self.hWaitStop)
if __name__=='__main__':
win32serviceutil.HandleCommandLine(win32test)
是写服务的模版
要插入的程序应该写在哪里 我看不懂 能不能给个例子
谢谢 程序已经编好了 运行也成功了 现在要加上一个监控某个文件夹的功能当文件夹中文件发生变动时对其中的文件调用函数 能不能给点思路 或者资料 我会再给你加分的谢谢 展开
import win32service
import win32event
class win32test(win32serviceutil.ServiceFramework):
_svc_name_ = "Python Win32 Service"
_svc_display_name_ = "Python Win32 Service"
_svc_description_ = "Just for a demo, do nothing."
def __init__(self, args):
win32serviceutil.ServiceFramework.__init__(self, args)
self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
def SvcDoRun(self):
win32event.WaitForSingleObject(self.hWaitStop, win32event.INFINITE)
def SvcStop(self):
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
win32event.SetEvent(self.hWaitStop)
if __name__=='__main__':
win32serviceutil.HandleCommandLine(win32test)
是写服务的模版
要插入的程序应该写在哪里 我看不懂 能不能给个例子
谢谢 程序已经编好了 运行也成功了 现在要加上一个监控某个文件夹的功能当文件夹中文件发生变动时对其中的文件调用函数 能不能给点思路 或者资料 我会再给你加分的谢谢 展开
1个回答
展开全部
简单的解释一下:
在类win32test的__init__函数执行完毕后,系统服务就算是启动成功了(启动)
这时windows系统会自动调用SvcDoRun函数,该函数不可以结束;如果该函数结束就表示服务停止。你的程序不管是放在__init__中以线程方式启动还是放在SvcDoRun函数中调用,必须确保该函数不退出。如果没有该函数,系统会提示该服务没什么事可作,然后就会停止服务。(正在运行)
当停止该服务时,系统会调用SvcStop函数,该函数通过某种方式(例如标志位)让SvcDoRun函数退出,服务就算是正常停止了。例子中是通过event事件让SvcDoRun函数停止等待,从而退出的。(停止)
注意:Windows系统关机时,是不会调用终止函数的。
在类win32test中你可以定义其他的方法(函数),用于自己的代码设计;这与普通的python类没有什么不同。
===========================================
监控文件夹需要记录的内容很多,文件夹的内容变化可能包括文件数量的变化,文件大小的变化,文件修改时间的变化,文件名称的变化等等,其中文件大小的变化必然引起修改时间的变化。
监测过程可以在一个循环中采用定时检测的方式,比如每1秒中检查一次,这主要是看应用的需求。在有变化时,可以针对该目录调用处理函数,将该目录作为处理函数的参数。如果仅仅是对变化的文件调用处理函数,一般是在循环检测时一并处理。处理函数要对新建文件、更改的文件、重命名的文件和删除的文件分别处理。同时还要记录此次检查时文件夹的状态,以便于下次循环检测进行比较。
还要注意测试一下对正在编辑的文件是否有影响。
如果在该文件夹中可能产生临时文件(例如打开word文件时会有临时文件出现),还要考虑如何避开临时文件的处理。
努力锻炼学习吧
在类win32test的__init__函数执行完毕后,系统服务就算是启动成功了(启动)
这时windows系统会自动调用SvcDoRun函数,该函数不可以结束;如果该函数结束就表示服务停止。你的程序不管是放在__init__中以线程方式启动还是放在SvcDoRun函数中调用,必须确保该函数不退出。如果没有该函数,系统会提示该服务没什么事可作,然后就会停止服务。(正在运行)
当停止该服务时,系统会调用SvcStop函数,该函数通过某种方式(例如标志位)让SvcDoRun函数退出,服务就算是正常停止了。例子中是通过event事件让SvcDoRun函数停止等待,从而退出的。(停止)
注意:Windows系统关机时,是不会调用终止函数的。
在类win32test中你可以定义其他的方法(函数),用于自己的代码设计;这与普通的python类没有什么不同。
===========================================
监控文件夹需要记录的内容很多,文件夹的内容变化可能包括文件数量的变化,文件大小的变化,文件修改时间的变化,文件名称的变化等等,其中文件大小的变化必然引起修改时间的变化。
监测过程可以在一个循环中采用定时检测的方式,比如每1秒中检查一次,这主要是看应用的需求。在有变化时,可以针对该目录调用处理函数,将该目录作为处理函数的参数。如果仅仅是对变化的文件调用处理函数,一般是在循环检测时一并处理。处理函数要对新建文件、更改的文件、重命名的文件和删除的文件分别处理。同时还要记录此次检查时文件夹的状态,以便于下次循环检测进行比较。
还要注意测试一下对正在编辑的文件是否有影响。
如果在该文件夹中可能产生临时文件(例如打开word文件时会有临时文件出现),还要考虑如何避开临时文件的处理。
努力锻炼学习吧
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询