python3--Linux文件自动更新小程序,
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 #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()
评论暂时关闭