python3--Linux文件自動更新小程式

来源:http://www.cnblogs.com/warlock921/archive/2017/09/15/7528812.html
-Advertisement-
Play Games

python版本:3.5.2 操作系統:ubuntu 16.04 LTS 這個練習小程式還沒有寫完,差最關鍵的更新代碼和備份代碼!(待續) 註意:本程式在windows下還無法正常運行,特別是列印內容的顏色,還有目錄的路徑分隔符的問題待解決! ...


  1 #!/usr/bin/python3
  2 #coding = utf-8
  3 
  4 #author = warlock921
  5 
  6 import os
  7 import sys
  8 import time
  9 import paramiko
 10 
 11 ServerDir=''
 12 ServerUpdateFileDir = 'UpdateFile'
 13 ServerBakDir = "BackupFile"
 14 
 15 if os.name == 'posix':
 16         ServerDir = "你需要更新的文件根目錄"
 17 elif os.name == 'nt':
 18         ServerDir = "你需要更新的文件根目錄"
 19         os.sep = '/'
 20 
 21 def print_point():
 22 
 23     for i in range(100):
 24         percent = 1.0*i/100*100
 25         print('完成進度:\033[1;31m %.2s %s \033[0m'%(str(percent),'%'),end='\r')
 26         time.sleep(0.08)
 27 
 28 
 29 def get_foward_dir():
 30     return os.getcwd()
 31 
 32 #用於讀取更新文檔目錄的方法
 33 def read_update_dir(vision_flag):
 34     dirlist = []
 35     path_file_list1 = {}
 36     path_file_list2 = {}
 37 
 38     #定義需要更新的目錄及文件列表
 39     #使用os.walk()函數實現遍歷當前路徑下的所有目錄結構,輸出為列表,列表值為tuple(元組)
 40     for i in os.walk("."):
 41         #print(dirlist)
 42         #將非空的目錄及非頂層的目錄保存到列表中
 43         if i[-1] != [] and i[0] != ".":
 44             dirlist.append(i)
 45             #print(dirlist)
 46     if dirlist == []:
 47         if vision_flag :
 48             print("\033[1;31m 註意: \033[0mUpdateFile文件夾下不存在可更新文件!按回車鍵退出!")
 49         #print(dirlist)
 50         input("")
 51         exit()
 52 
 53     dirlist_length = len(dirlist)
 54     #print(dirlist_length)
 55     list_num = 0
 56     #使用迴圈取出需要更新的目錄路徑及文件名稱列表
 57     while list_num < dirlist_length:
 58 
 59         update_dir = dirlist[list_num][0][1::]
 60         
 61         if vision_flag:
 62             print('-'*50)
 63             print("需要更新的目錄%d:\033[4;31m %s \033[0m"%((list_num+1),(ServerDir+update_dir+os.sep)))
 64 
 65         update_file = dirlist[list_num][-1]
 66         if vision_flag:
 67             print("需要更新的文件列表%d:%s"%((list_num+1),update_file))
 68         list_num+=1
 69         #這裡使用了Python3中字典的特性,將每次迴圈取出來的字典,再update進一個新的字典,這樣才能在字典中保存另一個字典
 70         path_file_list2.update(path_file_list1.fromkeys(update_file,(ServerDir+update_dir+os.sep)))
 71     return path_file_list2
 72 
 73 #用於顯示已更新過的文檔目錄
 74 def read_updated_dir():
 75     dirlist2 = []
 76     for j in os.walk("."):
 77         if j[-1] != [] and j[0] != ".":
 78             dirlist2.append(j)
 79             #print(dirlist2)
 80     dirlist2_length = len(dirlist2)
 81     #print(dirlist_length)
 82     list_num2 = 0
 83     while list_num2 < dirlist2_length:
 84         update_dir2 = dirlist2[list_num2][0][1::]
 85         print('-'*50)
 86         print("已更新的目錄%d:\033[1;33m %s \033[0m"%((list_num2+1),(ServerDir+update_dir2)))
 87         update_file2 = dirlist2[list_num2][-1]
 88         print("已更新的文件列表%d:\033[1;31m %s \033[0m"%((list_num2+1),update_file2))
 89         list_num2+=1
 90 
 91 
 92 def read_bak_dir():
 93     pass
 94 
 95 def do_update_file():
 96     vision_flag = False
 97     path_file_list=read_update_dir(vision_flag)
 98     #pfl_len=len(path_file_list)
 99     #遍歷字典path_file_list,取出其中的key,value用於顯示和更新
100     for path_file,path_dir in path_file_list.items():
101         print(" 已更新:%s \033[1;33m %s \033[0m"%(("..."+path_dir[13::]),path_file))
102         time.sleep(0.5)
103 
104 def do_backup_file():
105     print_point()
106     print("\033[1;33m 備份伺服器文件完成! \033[0m")
107 
108 #def into_server_need2update_file(need_update_path,need_update_file):
109     #pass
110 
111 def restart_server():
112     pass
113 
114 def main():
115     #update_flag用於表示文件是否已經更新過
116     update_flag = True
117     #vision_flag用於表示是否顯示函數里的列印語句
118     vision_flag = True
119 
120     list_x = []
121 
122     #定義當前目錄路徑
123     forward_dir = get_foward_dir()
124 
125     #迴圈遍歷當前文件夾,並將當前目錄下的文件夾(不包括文件)壓入列表
126     for x in os.listdir():
127         if os.path.isdir(x):
128             list_x.append(x)
129 
130     #判斷是否存在UpdateFile文件
131     if ServerUpdateFileDir in list_x:
132         #print("命中\033[1;31m %s \033[0m文件夾!"%ServerUpdateFileDir)
133         #操作更換工作目錄,進入需要更新的文件夾
134         os.chdir(("."+os.sep+ServerUpdateFileDir))
135     else:
136         #如果不存在UpdateFile文件,則讓用戶選擇是否建立該文件夾
137         print("\033[1;31m UpdateFile文件夾不存在,請先建立UpdateFile文件夾,否則無法更新! \033[0m")
138         mkdir_input=input("是否建立UpdateFile文件夾?(y/n):")
139         if mkdir_input == 'y' or mkdir_input == 'Y':
140             os.system('mkdir UpdateFile')
141             print("已經建立UpdateFile文件夾!")
142             os.chdir(("."+os.sep+ServerUpdateFileDir))
143             input('')
144         elif mkdir_input == 'n' or mkdir_input == 'N':
145             print("不建立UpdateFile文件夾,無法進行更新,系統退出!")
146             input('')
147             exit()
148         else:
149             pass
150     
151     #開始迴圈,更新程式主程式
152     while True:
153 
154         os.system('clear')
155         print("****************  更新程式  v1.01   *****************")
156         #字體列印顏色變更語法:\033[1;33;40m %s \033[0m
157         print("命中\033[1;31m %s \033[0m文件夾!"%ServerUpdateFileDir)
158         print(("當前工作目錄:\033[1;33;40m %s \033[0m")%forward_dir)
159         print("當前工作的文件夾:%s"%get_foward_dir())
160 
161         #判斷是否已經更新過
162         if update_flag:
163             #未更新則執行下麵語句
164             read_update_dir(vision_flag)
165             print('*'*50)
166             update_usr_input = input("\033[1;31m 註意 \033[0m是否開始更新文件:\n 1.開始更新 \n 2.不更新只備份文件 \n 3.退出更新程式 \n 請選擇(數字鍵1/2/3,預設3):")
167             if update_usr_input == "1":
168                 print("\033[1;31m 開始更新,請勿進行其他操作... \033[0m")
169                 
170                 #先備份
171                 do_backup_file()
172                 #後更新
173                 do_update_file()
174 
175                 print("更新成功完成!")
176                 update_flag = False
177                 input("")
178                 continue
179             elif update_usr_input == "2":
180                 do_backup_file()
181                 input("")
182                 continue
183             elif update_usr_input == "3":
184                 os.system('clear')
185                 print("系統退出!")
186                 exit()
187             else:
188                 os.system('clear')
189                 print("系統退出!")
190                 exit()
191         else:
192             #已更新過則執行下麵的代碼
193             print('*'*50)
194             update_usr_input = input("\033[1;31m 註意: \033[0m網站已經更新完成:\n 1.查看更新過的目錄 \n 2.退出更新程式 \n 請選擇(數字鍵1/2,預設2):")
195             if update_usr_input == "1":
196                 read_updated_dir()
197                 input("")
198                 continue
199             elif update_usr_input == "2":
200                 os.system('clear')
201                 print("系統退出!")
202                 exit()
203             else:
204                 os.system('clear')
205                 print("系統退出!")
206                 exit()
207 
208 
209 if __name__ == '__main__':
210     main()

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 昨天,一個大新聞爆出,MongoDB資料庫叕被攻擊了。就在上周末,三個黑客團夥劫持了MongoDB逾26000多台伺服器,其中規模最大的一組超過22000台。 “MongoDB啟示錄”再臨? 此次攻擊由安全專家Dylan Katz和Victor Gevers發現,被他們稱為是“MongoDB啟示錄” ...
  • 狀態名 作用域 詳細解釋 Aborted_clients Global 由於客戶端沒有正確關閉連接導致客戶端終止而中斷的連接數 Aborted_connects Global 試圖連接到MySQL伺服器而失敗的連接數 Binlog_cache_disk_use Global 使用臨時二進位日誌緩存但 ...
  • 需求: 如果表欄位的值為 0 則將其修改為1 ,如果表欄位的值為 1 則將其修改為 0。 方法一 方法二 方法三 ...
  • 一工廠的SQL Server資料庫伺服器上的YourSQLDba_LogBackups作業做事務日誌備份時,突然出現異常,異常的錯誤信息指向.NET Framework,出現這個問題時,一般我估計是該伺服器自動應用了.NET Framework的一些補丁導致,因為以前也碰到過這類錯誤,於是去檢查服務 ...
  • 通過servlet,jsp,mysql實現用戶顯示,功能模塊和後臺數據三個模塊分離 ...
  • 本文轉自:http://www.sqlines.com/oracle-to-sql-server/months_between In Oracle, MONTHS_BETWEEN(date1, date2) function returns the number of months between ...
  • 以Deepin為例,只需一條命令即可: sudo apt-get install curl libcurl3 libcurl3-dev php5-curl ...
  • ubantu下用qemu搭建arm+linux運行環境 概述 模擬的單板為vexpress a9,內核為cortex a9;安裝完qemu可用以下命令查看支持的機器: 或`qemu system arm M help` 沒有支持ST公司的板子,有支持arm9,arm11,cortex m3,cort ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...