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

Python語言編寫電腦時間自動同步小工具

 更新時間:2013年03月08日 17:04:35   投稿:mdxy-dxy  
家里有臺很多年前買的電腦,CMOS電池殘廢了,經(jīng)常遇到開機(jī)后系統(tǒng)時間被重置的情況

話不多說,小工具需求如下:
功能需求 -- 電腦開機(jī)后自動執(zhí)行時間同步
非功能需求 -- 安裝執(zhí)行簡單,無需安裝額外環(huán)境

一、代碼實(shí)現(xiàn)

基于以上需求,思路如下:訪問網(wǎng)絡(luò)獲取北京時間,然后調(diào)用命令行來設(shè)置系統(tǒng)時間。程序?qū)懗蒞indows Service,并設(shè)置為開機(jī)自動運(yùn)行。正好前段時間在學(xué)習(xí)Python,所以打算用Python來寫這個工具。具體代碼如下:

獲取網(wǎng)絡(luò)時間

復(fù)制代碼 代碼如下:

 def getBeijinTime():
     """
    獲取北京時間
     """
     try:
         conn = httplib.HTTPConnection("www.beijing-time.org")
         conn.request("GET", "/time.asp")
         response = conn.getresponse()
         print response.status, response.reason
         if response.status == 200:
             #解析響應(yīng)的消息
             result = response.read()
             logging.debug(result)
             data = result.split("\r\n")
             year = data[1][len("nyear")+1 : len(data[1])-1]
             month = data[2][len("nmonth")+1 : len(data[2])-1]
             day = data[3][len("nday")+1 : len(data[3])-1]
             #wday = data[4][len("nwday")+1 : len(data[4])-1]
             hrs = data[5][len("nhrs")+1 : len(data[5])-1]
             minute = data[6][len("nmin")+1 : len(data[6])-1]
             sec = data[7][len("nsec")+1 : len(data[7])-1]
            
             beijinTimeStr = "%s/%s/%s %s:%s:%s" % (year, month, day, hrs, minute, sec)
             beijinTime = time.strptime(beijinTimeStr, "%Y/%m/%d %X")
             return beijinTime
     except:
         logging.exception("getBeijinTime except")
         return None

同步本地系統(tǒng)時間
復(fù)制代碼 代碼如下:

 def syncLocalTime():
     """
     同步本地時間
     """
     logging.info("current local time is: %d-%d-%d %d:%d:%d" % time.localtime()[:6])
    
     beijinTime = getBeijinTime()
     if beijinTime is None:
         logging.info("get beijinTime is None, will try again in 30 seconds...")
         timer = threading.Timer(30.0, syncLocalTime)
         timer.start();
     else:
         logging.info("get beijinTime is: %d-%d-%d %d:%d:%d" % beijinTime[:6])
            
         tm_year, tm_mon, tm_mday, tm_hour, tm_min, tm_sec = beijinTime[:6]
         import os
         os.system("date %d-%d-%d" % (tm_year, tm_mon, tm_mday))     #設(shè)置日期
         os.system("time %d:%d:%d.0" % (tm_hour, tm_min, tm_sec))    #設(shè)置時間
         logging.info("syncLocalTime complete, current local time: %d-%d-%d %d:%d:%d \n" % time.localtime()[:6])

二、部署安裝

為了讓Python程序能以Windows服務(wù)的方式運(yùn)行,需要用到py2exe(用來把Python程序編譯成exe)和Python Win32 Extensions 。(py2exe把Python代碼編譯成Winodws服務(wù)時依賴此組件)下載并安裝這兩個組件。安裝完畢后,在Python的安裝目錄下找到py2exe的Windows Service示例({PythonRoot}\Lib\site-packages\py2exe\samples\advanced\MyService.py)。然后仿照這個示例將上面的代碼完善一下。

Windows服務(wù)示例

復(fù)制代碼 代碼如下:

 import win32serviceutil
 import win32service
 import win32event
 import win32evtlogutil
 
 class SynctimeService(win32serviceutil.ServiceFramework):
     _svc_name_ = "Synctime"
     _svc_display_name_ = "Synctime"
     _svc_description_ = "Synchronize local system time with beijin time"
    _svc_deps_ = ["EventLog"]
   
    def __init__(self, args):
        win32serviceutil.ServiceFramework.__init__(self, args)
        self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)

    def SvcStop(self):
        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
        win32event.SetEvent(self.hWaitStop)

    def SvcDoRun(self):
        import servicemanager
         
        # Write a 'started' event to the event log...
        win32evtlogutil.ReportEvent(self._svc_name_,
                                    servicemanager.PYS_SERVICE_STARTED,
                                    0, # category
                                    servicemanager.EVENTLOG_INFORMATION_TYPE,
                                    (self._svc_name_, ''))

        # wait for beeing stopped...
        win32event.WaitForSingleObject(self.hWaitStop, win32event.INFINITE)

        # and write a 'stopped' event to the event log.
        win32evtlogutil.ReportEvent(self._svc_name_,
                                    servicemanager.PYS_SERVICE_STOPPED,
                                    0, # category
                                    servicemanager.EVENTLOG_INFORMATION_TYPE,
                                    (self._svc_name_, ''))  

if __name__ == '__main__':
    # Note that this code will not be run in the 'frozen' exe-file!!!
    win32serviceutil.HandleCommandLine(SynctimeService) 



之后,再編寫一個steup.py文件用來生成安裝文件。

Setup.py

復(fù)制代碼 代碼如下:

 from distutils.core import setup
 import py2exe
 
 setup(
     # The first three parameters are not required, if at least a
     # 'version' is given, then a versioninfo resource is built from
     # them and added to the executables.
     version = "0.0.1",
     description = "Synchroniz local system time with beijin time",
     name = "sysctime",
 
     # targets to build
     # console = ["synctime.py"],
     service=["synctime"]
 )

編譯生成windows程序,如下圖:

然后在控制臺中運(yùn)行:setup.py py2exe ,一切順利的話會在當(dāng)前目錄下生成build和dist目錄。

控制臺目錄切換到dist目錄,找到synctime.exe,在命令行中運(yùn)行:

synctime.exe –install (-remove)  安裝或移除時間同步服務(wù)。

現(xiàn)在可以運(yùn)行services.msc查看服務(wù)運(yùn)行情況

可以看到服務(wù)并沒有啟動,而且啟動方式為手動。在這里可以右擊服務(wù)選擇屬性手動把服務(wù)啟動起來,并且設(shè)置為服務(wù)自動啟動。

好吧,我承認(rèn)。這樣操作跟上面的需求有點(diǎn)出入了,略顯麻煩。為了解決這個問題,自然想到的是用批處理來做。在dist目錄下分別建兩個批處理文件:

installservice.bat

復(fù)制代碼 代碼如下:

 @echo off
 
 :: 安裝windows服務(wù)
 echo 正在安裝服務(wù),請稍候...
 synctime.exe -install
 
 :: 設(shè)置服務(wù)自動啟動
 echo 正在啟動服務(wù)...
 sc config Synctime start= AUTO

:: 啟動服務(wù)
sc start Synctime

echo 服務(wù)啟動成功, 按任意鍵繼續(xù)...
pause



removeserivce.bat

復(fù)制代碼 代碼如下:

@echo off

:: 停止服務(wù)
echo 正在停止服務(wù),請稍候...
sc stop Synctime

echo 正在卸載服務(wù)...
:: 刪除windows服務(wù)
synctime.exe -remove

echo 服務(wù)卸載完成,請按任意鍵繼續(xù)剩余卸載...
pause

三、最終安裝效果圖

四、結(jié)尾

遺留的問題:

1、從上面的截圖可以看到,安裝程序在調(diào)用批處理時會顯示出控制臺窗口。這個問題我在網(wǎng)上查找資料,NSIS有相關(guān)的插件可以隱藏控制臺窗口調(diào)用bat文件。
2、我源代碼中有寫日志文件的操作,但是以Windows服務(wù)的方式運(yùn)行后,日志文件不能寫了,不知道有沒有好的解決辦法。
3、360 ...真是要人命啊....Orz..

時間同步工具及源代碼://m.fzitv.net/softs/74865.html

編譯方法:

第一步: 安裝Python環(huán)境(什么?還沒有Python環(huán)境?... - -!)
第二步: 安裝依賴組件
1、py2exe (目前只支持到python2.7)
2、Python Win32 Extensions

第三步(可選):安裝Nsis環(huán)境,用來編譯腳本

第四步:將synctime.py編譯成windows程序
1、在當(dāng)前目錄下運(yùn)行"setup.py py2exe",順利的話會在當(dāng)前目錄下生成dist和build目錄

第五步: 運(yùn)行,有兩種運(yùn)行方式:
1、將installservice.bat 和 removeservice.bat 拷貝到dist中運(yùn)行即可
2(依賴第三步)、使用Nsis編譯Synctime.nsi腳本,生成安裝包, 安裝后運(yùn)行(推薦)

相關(guān)文章

  • Python 發(fā)送SMTP郵件的簡單教程

    Python 發(fā)送SMTP郵件的簡單教程

    SMTP(Simple Mail Transfer Protocol)簡單郵件傳輸協(xié)議,Python內(nèi)置對SMTP的支持,可以發(fā)送純文本文件,HTML郵件以及附帶文件。本文講解如何使用python發(fā)送郵件
    2021-06-06
  • Python 3 中使用 Memcached的示例詳解

    Python 3 中使用 Memcached的示例詳解

    pymemcache是另一個流行的、功能豐富的Python Memcached客戶端庫,比python-memcached提供了復(fù)雜的操作和性能,在 Python3 中,使用 Memcached,高性能的分布式內(nèi)存對象緩存系統(tǒng),可以通過多個第三方庫來實(shí)現(xiàn),本文介紹Python 使用 Memcached相關(guān)知識,感興趣的朋友一起看看吧
    2024-02-02
  • 基于Python socket的端口掃描程序?qū)嵗a

    基于Python socket的端口掃描程序?qū)嵗a

    這篇文章主要介紹了基于Python socket的端口掃描程序?qū)嵗a,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • windows10安裝python依賴報錯can‘t?create?or?remove?files?in?install?directory問題

    windows10安裝python依賴報錯can‘t?create?or?remove?files?in?i

    這篇文章主要介紹了windows10安裝python依賴報錯can‘t?create?or?remove?files?in?install?directory問題及解決方案,具有很好的參考價值,希望對大家有所幫助
    2023-09-09
  • django數(shù)據(jù)庫migrate失敗的解決方法解析

    django數(shù)據(jù)庫migrate失敗的解決方法解析

    這篇文章主要介紹了django數(shù)據(jù)庫migrate失敗的解決方法解析,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • 如何獲取Python簡單for循環(huán)索引

    如何獲取Python簡單for循環(huán)索引

    這篇文章主要介紹了如何獲取Python簡單for循環(huán)索引,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • 解決Pycharm中import時無法識別自己寫的程序方法

    解決Pycharm中import時無法識別自己寫的程序方法

    今天小編就為大家分享一篇解決Pycharm中import時無法識別自己寫的程序方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Python中re模塊:匹配開頭/結(jié)尾(^/$)

    Python中re模塊:匹配開頭/結(jié)尾(^/$)

    本文主要介紹了Python中re模塊:匹配開頭/結(jié)尾(^/$),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Python爬蟲圖片懶加載技術(shù) selenium和PhantomJS解析

    Python爬蟲圖片懶加載技術(shù) selenium和PhantomJS解析

    這篇文章主要介紹了Python爬蟲圖片懶加載技術(shù) selenium和PhantomJS解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • 基于python實(shí)現(xiàn)Pycharm斷點(diǎn)調(diào)試

    基于python實(shí)現(xiàn)Pycharm斷點(diǎn)調(diào)試

    這篇文章主要介紹了基于python實(shí)現(xiàn)Pycharm斷點(diǎn)調(diào)試,在我們寫程序的時候,很容易遇到各種各樣的bug,然后編譯器提示程序出錯的地方。很多時候可以通過提示的信息修改程序,但是有時我們想得到更多的信息,這個時候就需要進(jìn)行斷點(diǎn)調(diào)試,下面我們就一起來學(xué)習(xí)ycharm斷點(diǎn)調(diào)試
    2022-02-02

最新評論

福州市| 新龙县| 凤凰县| 盈江县| 中西区| 肥西县| 永丰县| 原阳县| 鄂尔多斯市| 苏州市| 龙江县| 恭城| 尼勒克县| 皮山县| 连州市| 张家港市| 台州市| 五大连池市| 娄烦县| 凯里市| 泗水县| 宁晋县| 高陵县| 常宁市| 军事| 广昌县| 昌图县| 改则县| 揭西县| 新竹县| 应城市| 甘孜| 罗山县| 潞西市| 朝阳区| 青川县| 页游| 砀山县| 当雄县| 巩留县| 元氏县|