python to be Windows Daemon

参考:http://blog.csdn.net/ghostfromheaven/article/details/8604738

import win32serviceutil
import win32service
import win32event 

class PythonService(win32serviceutil.ServiceFramework):
    """
    Usage: ‘PythonService.py [options] install|update|remove|start [...]|stop|restart [...]|debug [...]‘
    Options for ‘install‘ and ‘update‘ commands only:
     --username domain\username : The Username the service is to run under
     --password password : The password for the username
     --startup [manual|auto|disabled|delayed] : How the service starts, default = manual
     --interactive : Allow the service to interact with the desktop.
     --perfmonini file: .ini file to use for registering performance monitor data
     --perfmondll file: .dll file to use when querying the service for
       performance data, default = perfmondata.dll
    Options for ‘start‘ and ‘stop‘ commands only:
     --wait seconds: Wait for the service to actually start or stop.
                     If you specify --wait with the ‘stop‘ option, the service
                     and all dependent services will be stopped, each waiting
                     the specified period.
    """
    #服务名
    _svc_name_ = "PythonService"
    #服务显示名称
    _svc_display_name_ = "Python Service Demo"
    #服务描述
    _svc_description_ = "Python service demo."

    def __init__(self, args):
        win32serviceutil.ServiceFramework.__init__(self, args)
        self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
        self.logger = self._getLogger()
        self.isAlive = True

    def _getLogger(self):
        import logging
        import os
        import inspect

        logger = logging.getLogger(‘[PythonService]‘)

        this_file = inspect.getfile(inspect.currentframe())
        dirpath = os.path.abspath(os.path.dirname(this_file))
        handler = logging.FileHandler(os.path.join(dirpath, "service.log"))

        formatter = logging.Formatter(‘%(asctime)s %(name)-12s %(levelname)-8s %(message)s‘)
        handler.setFormatter(formatter)

        logger.addHandler(handler)
        logger.setLevel(logging.INFO)

        return logger

    def SvcDoRun(self):
        import time
        self.logger.error("svc do run....")
        while self.isAlive:
            self.logger.error("I am alive.")
            time.sleep(1)
        # 等待服务被停止
        #win32event.WaitForSingleObject(self.hWaitStop, win32event.INFINITE) 

    def SvcStop(self):
        # 先告诉SCM停止这个过程
        self.logger.error("svc do stop....")
        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
        # 设置事件
        win32event.SetEvent(self.hWaitStop)
        self.isAlive = False

if __name__==‘__main__‘:
    win32serviceutil.HandleCommandLine(PythonService)
时间: 2024-10-28 11:26:12

python to be Windows Daemon的相关文章

利用Python脚本管理Windows服务

Windows服务常用的功能就是启动服务,关闭服务,重启服务和查询服务运行状态,其中查询服务运行状态是其他三种操作的基础. 本文中提到的使用Python脚本管理Windows服务实际上是调用win32serviceutil模块,此模块来自pywin32包,此模块本身有管理服务的功能,有兴趣的可以去阅读它的部分源码. 本脚本存在的目的是为了熟练Python的语法和基本操作,Windows下有更好的命令行工具来管理服务,如sc.Powershell等.通常命令行工具的执行速度要比services.m

Python基础知识——Windows上使用python

与大多数Unix系统和服务不同,Windows不需要Python本地,因此不预安装一个版本的Python.但是,CPython团队已经为每个版本编译Windows安装程序(MSI软件包)多年. 随着Python的不断发展,一些以前被支持的平台不再受支持(由于缺乏用户或开发人员).检查PEP 11有关所有不受支持的平台的详细信息. 仍然支持Windows CE. 在Cygwin的安装程序提供安装Python解释器,以及(参见Cygwin包的源,维护者的版本) 有关 具有预编译安装程序的平台的详细信

Python程序在Windows终端乱码解决方法

呵呵,对Windows妥妥的没有爱了.... 问题原因 Python程序在Windows终端(cmd)下乱码,是字符串编码的问题 Python文件编码 Python 默认脚本文件都是 ANSCII 编码的,当文件 中有非 ANSCII 编码范围内的字符的时候就要使用"编码指示"来修正. 一个module的定义中,如果.py文件中包含中文字符(严格的说是含有非anscii字符),则需要在第一行或第二行指定编码声明: http://shop.mogujie.com/detail/17p2y

Python环境搭建(windows)

Python环境搭建(windows) Python简介 Python(英国发音:/?pa?θ?n/ 美国发音:/?pa?θɑ?n/),是一种面向对象.直译式计算机编程语言,具有近二十年的发展历史,成熟且稳定.它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务.它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块. 与Scheme.Ruby.Perl.Tcl等动态语言一样,Python具备垃圾回收功能,能够自动管理内存使用.

利用Python脚本获取Windows和Linux的系统版本信息

查看系统版本信息是一件家常便饭的事情,有时候需要将版本信息录入到资产管理系统中,如果每次手动的去查询这些信息再录入系统那么是一件令人呢头疼的事情,如果采用脚本去完成这件事情,那么情况就有所不同了. 在Python的世界里,获取Windows版本信息和Linux的版本信息都可以采用platform模块,但platform模块也不是万能的,有些特殊的信息(比如Windows的内部版本号)这个模块拿不到,那么只能另辟蹊径了. 在Linux系统中,可以简单的认为一切都是文件,那么就算没有现成的命令可用时

python IsWindowEnabled遍历windows的所有窗口并输出窗口标题

这段代码可以让Python遍历当前Windows下所有运行程序的窗口,并获得运行窗口的标题输出 #! /usr/bin/env python# -*- coding: utf-8 -*- from win32gui import *titles = set()def foo(hwnd,mouse): #去掉下面这句就所有都输出了,但是我不需要那么多 if IsWindow(hwnd) and IsWindowEnabled(hwnd) and IsWindowVisible(hwnd): tit

python 中调用windows系统api操作剪贴版

# -*- coding: utf-8 -*- ''' Created on 2013-11-26 @author: Chengshaoling ''' import win32clipboard as w32 import win32con class OperateClipboard(object): def __init__(self): # print "OperateClipboard" pass def getText(self): w32.OpenClipboard()

python MySQLdb在windows环境下的快速安装

python MySQLdb在windows环境下的快速安装.问题解决方式 使用python访问mysql,需要一系列安装 linux下MySQLdb安装见 Python MySQLdb在Linux下的快速安装 http://blog.csdn.net/wklken/article/details/7271019 ------------------------------------------------------------- 以下是windows环境下的: 1.      安装数据库m

Python几个windows版本的区别

下载地址:https://www.python.org/downloads/windows/ Download Windows x86 web-based installer Download Windows x86 executable installer Download Windows x86 embeddable zip file Download Windows x86-64 web-based installer Download Windows x86-64 executable