1 #!/usr/bin/python3
2 #coding = utf-8
3
4 #author = warlock921
5
6 importos7 importsys8 importtime9 importparamiko10
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 defprint_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 defget_foward_dir():30 returnos.getcwd()31
32 #用于读取更新文档目录的方法
33 defread_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 ifvision_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 =056 #使用循环取出需要更新的目录路径及文件名称列表
57 while list_num <58>
59 update_dir = dirlist[list_num][0][1::]60
61 ifvision_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 ifvision_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 returnpath_file_list272
73 #用于显示已更新过的文档目录
74 defread_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 =083 while list_num2 <84 update_dir2="dirlist2[list_num2][0][1::]85" print update_file2="dirlist2[list_num2][-1]88" list_num2>
90
91
92 defread_bak_dir():93 pass
94
95 defdo_update_file():96 vision_flag =False97 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 inpath_file_list.items():101 print("已更新:%s \033[1;33m %s \033[0m"%(("..."+path_dir[13::]),path_file))102 time.sleep(0.5)103
104 defdo_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 defrestart_server():112 pass
113
114 defmain():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 inos.listdir():127 ifos.path.isdir(x):128 list_x.append(x)129
130 #判断是否存在UpdateFile文件
131 if ServerUpdateFileDir inlist_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 whileTrue: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 ifupdate_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 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()
84>58>