使用fabric 2.5.0 上传文件

python3.6使用fabric2.5.0。最近开发东西都是在windows里面使用vs编写,然后传送到远端服务器上做编译。为了方便及时同步代码,编写了一个脚本来处理这个事情。
处理步骤:

  1. 检查本地文件目录下,svn状态列表中被修改、添加的文件;
  2. 对比本地文件和远程文件是否md5码匹配;
  3. 通过fabric2.5.0上传到远程服务;
#!/usr/bin/python
# encoding: utf-8
# pip install svn
# pip install fabric
#
import logging
import os
import svn.local
from fabric import Connection
import hashlib

logging.basicConfig(level=logging.INFO,format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',datefmt='%a, %d %b %Y %H:%M:%S')

# 指定远程的服务器目录地址
path_remoate = "/home/cq/work/server/"

# 计算本地文件md5码
def GetFileMd5(filename):
    if not os.path.isfile(filename):
        return
    myhash = hashlib.md5()
    f = open(filename,'rb')
    while True:
        b = f.read(8096)
        if not b :
            break
        myhash.update(b)
    f.close()
    return myhash.hexdigest()


def main():
    # 链接远程服务器的配置
    c = Connection(host="10.0.20.117",
        user="cq",
        connect_kwargs={"key_filename": "E:/software/keyfile/id_rsa_abel",})
    c.open()
    logging.info(c.is_connected)
    # 测试执行执行指令
    c.run("pwd")
    # 获取本地svn文件状态
    l = svn.local.LocalClient('./')
    entries = l.status()
    for filename in entries:
        # 选择“修改”、“添加”状态的文件
        if filename.type_raw_name=='modified' or 'added' == filename.type_raw_name:
            name = filename.name
            name = name.replace("\\","/")
            logging.info("put name: {0}".format(name))
            # 通过Linux指令计算出远程的文件md5,并且赋值给retstr
            cmd = "md5sum {0}{1}".format(path_remoate,name) + "|awk '{print $1}'"
            retstr = c.run(cmd)
            # 计算本地m5,并且匹配
            selfmd5 = GetFileMd5(name)
            print(selfmd5)
            # 命令行返回的md5将会带一个\n,需要去除
            if retstr.stdout[:-1] == selfmd5:
                print("match")
            else:
                print("not match")
                # 不匹配的情况下,将会开始使用fabric的put命令上传文件
                c.put(name,"{0}{1}".format(path_remoate,name))
    c.close()

if __name__ == '__main__':
    main()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
protobuf 2.5.0 是一个用于序列化结构化数据的库,它可以将数据转换为紧凑的二进制格式,便于在网络传输或存储中使用。下面是使用protobuf 2.5.0 生产的Java代码的一般步骤: 1. 定义数据结构:首先,需要在.proto文件中定义数据结构,包括消息名称和字段类型等信息。例如,定义一个简单的消息结构可以如下所示: ```protobuf message Person { required string name = 1; required int32 age = 2; optional string email = 3; } ``` 2. 使用protoc编译器生成Java代码:使用protobuf提供的protoc编译器,将.proto文件编译为Java代码。可以运行以下命令来执行编译: ```shell protoc --java_out=<output_directory> <proto_file>.proto ``` 其中,`<output_directory>`是指定输出目录的路径,`<proto_file>`是你的.proto文件。 3. 集成生成的Java代码:将生成的Java代码集成到你的项目中。在你的Java代码中,你可以使用生成的消息类和相关的方法来创建、序列化、反序列化和操作消息对象。 ```java Person person = Person.newBuilder() .setName("John Doe") .setAge(30) .setEmail("john.doe@example.com") .build(); byte[] serializedData = person.toByteArray(); // 反序列化 Person deserializedPerson = Person.parseFrom(serializedData); System.out.println(deserializedPerson.getName()); System.out.println(deserializedPerson.getAge()); System.out.println(deserializedPerson.getEmail()); ``` 以上代码创建一个Person对象,并将其序列化为字节数组。然后,从字节数组中反序列化数据并打印出来。 这只是使用protobuf 2.5.0生成的Java代码的基本用法示例。实际使用中,你可能还需要根据你的需求,自定义更复杂的消息结构,并进行更多的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值