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

 

相关内容

    暂无相关文章