久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

python3寫的簡(jiǎn)單本地文件上傳服務(wù)器

 yydy1983 2019-08-09

python是個(gè)很好玩的東西,?好吧我隨口說的,,反正因?yàn)楦鞣N原因(其實(shí)到底是啥我也不知道),,簡(jiǎn)單的學(xué)習(xí)了下python,然后寫了一個(gè)上傳文件上服務(wù)器的小玩具練手,。

大概功能是這樣:

1、獲取本地文件列表(包括文件夾)

2、檢查服務(wù)器上是否存在,,不存在直接上傳,存在的話,,文件夾無視,,文件比較大小,大小不一致則覆蓋,,最后檢查服務(wù)器上是否存在本地沒有的文件,,存在則刪除

3、之后增加了忽略列表,,忽略文件類型

4,、然后增加了重啟tomcat,但是這個(gè)功能未進(jìn)行測(cè)試

大概就是這個(gè)樣子,,哦了,,丟代碼丟代碼

  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. import os
  4. import os.path
  5. import paramiko
  6. import datetime
  7. import re
  8. # 配置屬性
  9. config = {
  10. #本地項(xiàng)目路徑
  11. 'local_path' : '',
  12. # 服務(wù)器項(xiàng)目路徑
  13. 'ssh_path' : '',
  14. # 項(xiàng)目名
  15. 'project_name' : '',
  16. # 忽視列表
  17. 'ignore_list' : [],
  18. # ssh地址、端口,、用戶名,、密碼
  19. 'hostname' : '',
  20. 'port' : 22,
  21. 'username' : '',
  22. 'password' : '',
  23. # 是否強(qiáng)制更新
  24. 'mandatory_update' : False,
  25. # 更新完成后是否重啟tomcat
  26. 'restart_tomcat' : False,
  27. # tomcat bin地址
  28. 'tomcat_path' : '',
  29. # 被忽略的文件類型
  30. 'ignore_file_type_list' : []
  31. }
  32. # 檢查文件夾是否存在,不存在則創(chuàng)建
  33. def check_folder(path):
  34. stdin, stdout, stderr = ssh.exec_command('find ' + path)
  35. result = stdout.read().decode('utf-8')
  36. if len(result) == 0 :
  37. print('目錄 %s 不存在,,創(chuàng)建目錄' % path)
  38. ssh.exec_command('mkdir ' + path)
  39. print('%s 創(chuàng)建成功' % path)
  40. return 1
  41. else:
  42. print('目錄 %s 已存在' % path)
  43. return 0
  44. # 檢查文件是否存在,,不存在直接上傳,存在檢查大小是否一樣,,不一樣則上傳
  45. def check_file(local_path, ssh_path):
  46. # 檢查文件是否存在,,不存在直接上傳
  47. stdin, stdout, stderr = ssh.exec_command('find ' + ssh_path)
  48. result = stdout.read().decode('utf-8')
  49. if len(result) == 0 :
  50. sftp.put(local_path,ssh_path)
  51. print('%s 上傳成功' % (ssh_path))
  52. return 1
  53. else:
  54. # 存在則比較文件大小
  55. # 本地文件大小
  56. lf_size = os.path.getsize(local_path)
  57. # 目標(biāo)文件大小
  58. stdin, stdout, stderr = ssh.exec_command('du -b ' + ssh_path)
  59. result = stdout.read().decode('utf-8')
  60. tf_size = int(result.split('\t')[0])
  61. print('本地文件大小為:%s,遠(yuǎn)程文件大小為:%s' % (lf_size, tf_size))
  62. if lf_size == tf_size:
  63. print('%s 大小與本地文件相同,,不更新' % (ssh_path))
  64. return 0
  65. else:
  66. sftp.put(local_path,ssh_path)
  67. print('%s 更新成功' % (ssh_path))
  68. return 1
  69. # 上傳流程開始
  70. print('上傳開始')
  71. begin = datetime.datetime.now()
  72. # 文件夾列表
  73. folder_list = []
  74. # 文件列表
  75. file_list = []
  76. # ssh上文件列表
  77. ssh_file_list = []
  78. for parent,dirnames,filenames in os.walk(config['local_path']+config['project_name']):
  79. #初始化文件夾列表
  80. for dirname in dirnames:
  81. p = os.path.join(parent,dirname)
  82. folder_list.append(p[p.find(config['project_name']):])
  83. #初始化文件列表
  84. for filename in filenames:
  85. if config['ignore_list'].count(filename) == 0:
  86. p = os.path.join(parent,filename)
  87. file_list.append(p[p.find(config['project_name']):])
  88. print('共有文件夾%s個(gè),,文件%s個(gè)' % (len(folder_list),len(file_list)))
  89. # ssh控制臺(tái)
  90. ssh = paramiko.SSHClient()
  91. ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  92. ssh.connect(hostname=config['hostname'], port=config['port'], username=config['username'], password=config['password'])
  93. # ssh傳輸
  94. transport = paramiko.Transport((config['hostname'],config['port']))
  95. transport.connect(username=config['username'],password=config['password'])
  96. sftp = paramiko.SFTPClient.from_transport(transport)
  97. # 檢查根目錄是否存在
  98. root_path = config['ssh_path'] + config['project_name']
  99. stdin, stdout, stderr = ssh.exec_command('find ' + root_path)
  100. result = stdout.read().decode('utf-8')
  101. if len(result) == 0 :
  102. print('目錄 %s 不存在,創(chuàng)建目錄' % root_path)
  103. ssh.exec_command('mkdir ' + root_path)
  104. print('%s 創(chuàng)建成功' % root_path)
  105. else:
  106. print('目錄 %s 已存在,,獲取所有文件' % root_path)
  107. ssh_file_list = re.split('\n',result)
  108. # 檢查文件夾
  109. create_folder_num = 0
  110. for item in folder_list:
  111. target_folder_path = config['ssh_path'] + item
  112. create_folder_num = create_folder_num + check_folder(target_folder_path)
  113. # 檢查文件
  114. update_file_num = 0
  115. for item in file_list:
  116. if config['ignore_file_type_list'].count(os.path.splitext(item)[1]) == 0:
  117. local_file_path = config['local_path'] + item
  118. target_file_path = config['ssh_path'] + item
  119. if config['mandatory_update']:
  120. sftp.put(local_file_path,target_file_path)
  121. print('%s 強(qiáng)制更新成功' % (target_file_path))
  122. update_file_num = update_file_num + 1
  123. else:
  124. update_file_num = update_file_num + check_file(local_file_path, target_file_path)
  125. else:
  126. print('%s 在被忽略文件類型中,,所以被忽略' % item)
  127. # 檢查ssh是否有需要?jiǎng)h除的文件
  128. delete_file_num = 0
  129. for item in ssh_file_list:
  130. temp = item[item.find(config['project_name']):]
  131. if folder_list.count(temp) == 0 and file_list.count(temp) == 0 and temp != config['project_name'] and temp != '':
  132. print('%s 在本地不存在,刪除' % item)
  133. ssh.exec_command('rm -rf ' + item)
  134. delete_file_num = delete_file_num + 1
  135. end = datetime.datetime.now()
  136. print('本次上傳結(jié)束:創(chuàng)建文件夾%s個(gè),,更新文件%s個(gè),,刪除文件%s個(gè),耗時(shí):%s' % (create_folder_num, update_file_num, delete_file_num, end-begin))
  137. if config['restart_tomcat']:
  138. print('關(guān)閉tomcat')
  139. ssh.exec_command('sh ' + config['tomcat_path'] + 'shutdown.sh')
  140. print('啟動(dòng)tomcat')
  141. ssh.exec_command('sh ' + config['tomcat_path'] + 'startup.sh')
  142. # 關(guān)閉連接
  143. sftp.close()
  144. ssh.close()

最后加了個(gè)強(qiáng)制更新,即不管三七二十一只要不在忽略列表中直接上傳覆蓋,,畢竟通過比較大小來更新文件有概率出問題,,比如我把1改成2那么通過文件大小是無法對(duì)比出來的,如果之后有時(shí)間的話會(huì)琢磨下拉取git更新記錄或者別的方案,。                                     

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多