使用fabric 2 5 0 上傳檔案

2021-10-01 20:43:03 字數 2376 閱讀 7357

python3.6使用fabric2.5.0。最近開發東西都是在windows裡面使用vs編寫,然後傳送到遠端伺服器上做編譯。為了方便及時同步**,編寫了乙個指令碼來處理這個事情。

處理步驟:

檢查本地檔案目錄下,svn狀態列表中被修改、新增的檔案;

對比本地檔案和遠端檔案是否md5碼匹配;

通過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碼

defgetfilemd5

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

) 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: "

.format

(name)

)# 通過linux指令計算出遠端的檔案md5,並且賦值給retstr

cmd =

"md5sum "

.format

(path_remoate,name)

+"|awk ''"

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,"".

format

(path_remoate,name)

) c.close(

)if __name__ ==

'__main__'

: main(

)

Fabric實現閘道器模式檔案上傳與執行

一 點睛 本實戰通過fabric的env物件定義閘道器模式,即俗稱的中轉 堡壘機環境。定義格式為 env.gateway 192.168.0.105 其中 ip 192.168.0.105 為堡壘機ip,再結合任務函式實現目標主機檔案上傳與執行的操作。二 coding utf 8 usr bin e...

使用Htmlunit上傳檔案

使用htmlunit模擬瀏覽器操作時,我們有時候要做一些上傳檔案操作。這就要利用htmlfileinput這個類了。webclient client new webclient htmlpage page client.getpage 通過page獲得htmlform,再通過htmlform獲得ht...

使用FileUpload上傳檔案

下面是fileupload上傳的基本步驟 1 建立磁碟工廠 diskfileitemfactory factory new diskfileitemfactory 2 建立處理工具 servletfileupload upload new servletfileupload factory 3 設定...