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()