不多说,我们直接上源码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
# -*- coding:UTF-8 -*-
'''
实现文件打包、上传与校验
Created on 2018年1月12日
@author: liuyazhuang
'''
from fabric.api import *
from fabric.context_managers import *
from fabric.contrib.console import confirm
env.user = 'root'
env.hosts = [ '10.2.2.2' ]
env.password = 'cardio-2017'
@task
@runs_once
def tar_task(): #本地打包任务函数,只限执行一次
with lcd( "/data/logs" ):
local( "tar -czf access.tar.gz access.log" )
@task
def put_task(): #上传文件任务函数
run( "mkdir -p /nginx/logs" )
with cd( "/nginx/logs" ):
#put(上传操作)出现异常时,继续执行,非终止
with settings(warn_only = True ):
result = put( "/data/logs/access.tar.gz" , "/nginx/logs/access.tar.gz" )
if result.failed and not confirm( "put file failed, Contiunue[Y/N]?" ):
#出现异常时,确认用户是否继续,(Y继续)
abort( "Aborting file put task!" )
@task
def check_task(): #校验文件任务函数
with settings(warn_only = True ):
#本地local命令需要配置capture=True才能捕获返回值
lmd5 = local( "md5sum /data/logs/access.tar.gz" , capture = True ).split( ' ' )[ 0 ]
rmd5 = run( "md5sum /nginx/logs/access.tar.gz" ).split( ' ' )[ 0 ]
#对比本地与远程文件的md5信息
if lmd5 = = rmd5:
print "OK" ;
else :
print "ERROR"
@task
def execute(): #统一执行tar_task()、put_task()、check_task()
tar_task()
put_task()
check_task()
|
本实例分别定义了3个功能函数,实现了文件的打包、上传和校验的功能,且3个功能相互独立,可分开运行
1
2
3
|
fab - f file_handler.py tar_task #文件打包操作
fab - f file_handler.py put_task #文件上传操作
fab - f file_handler.py check_task #文件校验操作
|
也可以通过以下命令组合在一起运行
1
|
fab - f file_handler.py execute
|
以上这篇Python 实现文件打包、上传与校验的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/l1028386804/article/details/79042656