最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用python?pywin32模塊創(chuàng)建windows服務(wù)實(shí)例探究

 更新時(shí)間:2024年01月07日 15:03:51   作者:hyang0?生有可戀  
這篇文章主要為大家介紹了使用python?pywin32模塊創(chuàng)建windows服務(wù)實(shí)現(xiàn)實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

pywin32 模塊

在 Windows 上,Python 沒有內(nèi)置的守護(hù)進(jìn)程(daemon)模塊。但是你可以使用 pywin32 模塊來實(shí)現(xiàn)類似的功能。先安裝 pywin32 模塊,然后使用 pywin32 模塊調(diào)用 windows 服務(wù) API 創(chuàng)建一個(gè)后臺(tái)服務(wù)。

最終效果是在 services.msc 中會(huì)多出一個(gè)自定義的服務(wù):

安裝

在給出示例代碼前要先安裝 pywin32 模塊:

C:\> pip install pywin32

同時(shí)我們還會(huì)用到 psutil 獲取進(jìn)程 ID,需要安裝 psutil 模塊:

C:\> pip install psutil

先將進(jìn)程的PID寫入到指定的文件中

以下代碼實(shí)現(xiàn)了一個(gè)后臺(tái)進(jìn)程,它會(huì)先將進(jìn)程的PID寫入到指定的文件中,然后啟動(dòng)一個(gè)死循環(huán),每5秒打印一條消息代表進(jìn)程還存活著。

#!python3
# Filename: pyservices.py
import win32serviceutil
import win32service
import win32event
import servicemanager
import socket
import sys
import time
import psutil
def write_process_id_to_file(file_path):
    pid = str(psutil.Process().pid)
    with open(file_path, 'w') as file:
        file.write(pid)
# 進(jìn)程ID
process_id_file_path = r"d:\MyPythonService.pid"
class MyService(win32serviceutil.ServiceFramework):
    _svc_name_ = "MyPythonService"
    _svc_display_name_ = "My Python Service"
    def __init__(self, args):
        win32serviceutil.ServiceFramework.__init__(self, args)
        self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
        socket.setdefaulttimeout(60)
        self.is_alive = True
    def SvcStop(self):
        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
        win32event.SetEvent(self.hWaitStop)
        self.is_alive = False
    def SvcDoRun(self):
        servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
                              servicemanager.PYS_SERVICE_STARTED,
                              (self._svc_name_, ''))
        self.main()
    def main(self):
        write_process_id_to_file(process_id_file_path)
        while self.is_alive:
            # 在這里編寫你的守護(hù)進(jìn)程主要邏輯
            print("Daemon is running...")
            time.sleep(5)
if __name__ == '__main__':
    if len(sys.argv) == 1:
        servicemanager.Initialize()
        servicemanager.PrepareToHostSingle(MyService)
        servicemanager.StartServiceCtrlDispatcher()
    else:
        win32serviceutil.HandleCommandLine(MyService)

以管理員身份運(yùn)行 cmd,在命令行安裝當(dāng)前服務(wù):

d:\> python pyservices.py install
Installing service MyPythonService
copying host exe 'C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\win32\pythonservice.exe' -> 'C:\Users\Administrator\AppData\Local\Programs\Python\Python311\pythonservice.exe'
copying helper dll 'C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\pywin32_system32\pywintypes311.dll' -> 'C:\Users\Administrator\AppData\Local\Programs\Python\Python311\pywintypes311.dll'
Service installed

services.msc查看MyPythonService

安裝完后即可在 services.msc 中查看到 MyPythonService 已經(jīng)注冊(cè)到系統(tǒng)服務(wù)中了。

此時(shí)可以在服務(wù)面板中對(duì)服務(wù)進(jìn)行啟停,也可以在命令行中對(duì)注冊(cè)的服務(wù)進(jìn)行啟停:

C:\> net stop MyPythonService
My Python Service 服務(wù)正在停止..
My Python Service 服務(wù)已成功停止。

C:\> net start MyPythonService
My Python Service 服務(wù)正在啟動(dòng) .
My Python Service 服務(wù)已經(jīng)啟動(dòng)成功。

同時(shí),我們也可以在剛才的腳本執(zhí)行位置對(duì)注冊(cè)的服務(wù)進(jìn)行啟停:

d:\> python pyservices.py start
Starting service MyPythonService

d:\> python pyservices.py stop
Stopping service MyPythonService

d:\> python pyservices.py restart
Restarting service MyPythonService

除了啟停服務(wù)之外,我們還能能 debug 方式運(yùn)行服務(wù)。當(dāng)以 debug 方式運(yùn)行時(shí),服務(wù)不會(huì)以后臺(tái)方式運(yùn)行,并且可以通過 ctrl+c 結(jié)束程序:

d:\> python pyservices.py debug
Debugging service MyPythonService - press Ctrl+C to stop.
Info 0x40001002 - The MyPythonService service has started.
Daemon is running...
Daemon is running...
Daemon is running...

當(dāng)代碼有更新時(shí)可以通過 update 命令更新服務(wù):

d:\> python pyservices.py update
Changing service configuration
copying host exe 'C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\win32\pythonservice.exe' -> 'C:\Users\Administrator\AppData\Local\Programs\Python\Python311\pythonservice.exe'
Service updated

當(dāng)不再需要運(yùn)行此服務(wù)時(shí),可以注銷掉服務(wù):

d:\> python pyservices.py remove
Removing service MyPythonService
Service removed

以上就是使用python pywin32模塊創(chuàng)建windows服務(wù)實(shí)例探究的詳細(xì)內(nèi)容,更多關(guān)于python創(chuàng)建windows服務(wù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python 四大核心數(shù)據(jù)結(jié)構(gòu)之列表、字典、元組、集合

    Python 四大核心數(shù)據(jù)結(jié)構(gòu)之列表、字典、元組、集合

    這段文章詳細(xì)介紹了Python中的列表、元組、字典和集合四種數(shù)據(jù)結(jié)構(gòu)的核心特點(diǎn)和適用場(chǎng)景,特別強(qiáng)調(diào)了列表的有序可修改、元組的有序不可修改、字典的鍵值對(duì)映射以及集合的自動(dòng)去重功能,感興趣的朋友跟隨小編一起看看吧
    2026-06-06
  • python中計(jì)算一個(gè)列表中連續(xù)相同的元素個(gè)數(shù)方法

    python中計(jì)算一個(gè)列表中連續(xù)相同的元素個(gè)數(shù)方法

    今天小編就為大家分享一篇python中計(jì)算一個(gè)列表中連續(xù)相同的元素個(gè)數(shù)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Pyhton中單行和多行注釋的使用方法及規(guī)范

    Pyhton中單行和多行注釋的使用方法及規(guī)范

    大家都知道python中的注釋有多種,有單行注釋,多行注釋,批量注釋,中文注釋也是常用的。python注釋也有自己的規(guī)范,這篇文章文章中會(huì)給大家詳細(xì)介紹Pyhton中單行和多行注釋的使用方法及規(guī)范,有需要朋友們可以參考借鑒。
    2016-10-10
  • Python?頁面解析Beautiful?Soup庫的使用方法

    Python?頁面解析Beautiful?Soup庫的使用方法

    Beautiful?Soup?簡稱?BS4(其中?4?表示版本號(hào))是一個(gè)?Python?中常用的頁面解析庫,它可以從?HTML?或?XML?文檔中快速地提取指定的數(shù)據(jù),這篇文章主要介紹了springboot?集成?docsify?實(shí)現(xiàn)隨身文檔?,需要的朋友可以參考下
    2022-09-09
  • 用實(shí)例說明python的*args和**kwargs用法

    用實(shí)例說明python的*args和**kwargs用法

    python的*args和**kwargs如何用,看了下面的例子你就清楚了。
    2013-11-11
  • Python使用MinerU的簡單的示例

    Python使用MinerU的簡單的示例

    MinerU是國產(chǎn)的一款將PDF轉(zhuǎn)化為機(jī)器可讀格式的工具,本文主要介紹了Python使用MinerU的簡單的示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-04-04
  • python?實(shí)現(xiàn)?mp3Play?音頻播放

    python?實(shí)現(xiàn)?mp3Play?音頻播放

    這篇文章主要介紹了python?實(shí)現(xiàn)?mp3Play?音頻播放,文章基于python的相關(guān)資料展開詳細(xì)內(nèi)容,具有一定的參考價(jià)值需要的小伙伴可以參考一下
    2022-04-04
  • 在python中l(wèi)ogger setlevel沒有生效的解決

    在python中l(wèi)ogger setlevel沒有生效的解決

    今天小編就為大家分享一篇在python中l(wèi)ogger setlevel沒有生效的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • 使用Python實(shí)現(xiàn)在PowerPoint文件中創(chuàng)建各種類型的圖表

    使用Python實(shí)現(xiàn)在PowerPoint文件中創(chuàng)建各種類型的圖表

    在現(xiàn)代商務(wù)演示和數(shù)據(jù)分析報(bào)告中,將復(fù)雜數(shù)據(jù)以可視化圖表的形式呈現(xiàn)在 PowerPoint 幻燈片中已成為標(biāo)準(zhǔn)做法,本文將深入探討如何使用 Python 在 PowerPoint 演示文稿中創(chuàng)建各種類型的圖表,并對(duì)其進(jìn)行精確的數(shù)據(jù)配置和樣式定制,有需要的小伙伴可以了解下
    2026-03-03
  • Django創(chuàng)建一個(gè)后臺(tái)的基本步驟記錄

    Django創(chuàng)建一個(gè)后臺(tái)的基本步驟記錄

    這篇文章主要給大家介紹了關(guān)于Django創(chuàng)建一個(gè)后臺(tái)的基本步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10

最新評(píng)論

绥阳县| 山东省| 金乡县| 铜山县| 景德镇市| 沧源| 黔西县| 龙门县| 多伦县| 内乡县| 丹巴县| 房产| 阿拉善左旗| 建瓯市| 沁水县| 瑞金市| 宜城市| 南木林县| 哈巴河县| 新泰市| 绥化市| 绥棱县| 永仁县| 诏安县| 梁河县| 连州市| 平原县| 宁阳县| 南郑县| 隆安县| 奎屯市| 黑水县| 镇平县| 磴口县| 横山县| 东城区| 荔波县| 乐平市| 韶山市| 龙井市| 长阳|