python3--Linux檔案自動更新小程式,
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 #pass110 111 def restart_server():112 pass113 114 def main():115 #update_flag用於表示檔案是否已經更新過116 update_flag = True117 #vision_flag用於表示是否顯示函數裡的列印語句118 vision_flag = True119 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 pass150 151 #開始迴圈,更新程式主程式152 while True:153 154 os.system('clear')155 print("**************** 更新程式 v1.01 *****************")156 #字型列印顏色變更文法:\033[1;33;40m %s \033[0m157 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 = False177 input("")178 continue179 elif update_usr_input == "2":180 do_backup_file()181 input("")182 continue183 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 continue199 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()