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)
(selfmd5)
# 命令列返回的md5將會帶乙個\n,需要去除
if retstr.stdout[:-
1]== selfmd5:
("match"
)else
("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 設定...