python 程序自动升级_python3--Linux文件自动更新小程序

本文介绍了一个自动化文件更新程序的实现细节,包括如何遍历文件夹、读取待更新文件列表、执行备份与更新操作等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值