日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python fabric使用

發布時間:2025/7/14 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python fabric使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作用

很強大的工具

可以將自動化部署或者多機操作的命令固化到一個腳本里

和某些運維工具很像,用它主要是因為,Python…..

簡單好用易上手

當然,shell各種命令組合起來也可以,上古神器和現代兵器的區別

環境配置

在本機和目標機器安裝對應包(注意,都要有)

sudo?easy_install?fabric

目前是1.6版本(或者用pip install,一樣的)

安裝完后,可以查看是否安裝成功

[ken@~$]?which?fab /usr/local/bin/fab

裝完之后,可以瀏覽下官方文檔

然后,可以動手了

hello world

先進行本機簡單操作,有一個初步認識,例子來源與官網

新建一個py腳本: fabfile.py

def?hello():print("Hello?world!")

命令行執行:

[ken@~/tmp/fab$]?fab?hello Hello?world!Done.

注意,這里可以不用fabfile作為文件名,但是在執行時需指定文件

[ken@~/tmp/fab$]?mv?fabfile.py?test.py fabfile.py?->?test.py [ken@~/tmp/fab$]?fab?helloFatal?error:?Couldn't?find?any?fabfiles!Remember?that?-f?can?be?used?to?specify?fabfile?path,?and?use?-h?for?help.Aborting. [ken@~/tmp/fab$]?fab?-f?test.py?hello Hello?world!Done.

帶參數:

修改fabfile.py腳本:

def?hello(name,?value):print("%s?=?%s!"?%?(name,?value))

執行

[ken@~/tmp/fab$]?fab?hello:name=age,value=20 age?=?20!Done. [ken@~/tmp/fab$]?fab?hello:age,20 age?=?20!Done.

執行本機操作

簡單的本地操作:

from?fabric.api?import?localdef?lsfab():local('cd?~/tmp/fab')local('ls')

結果:

[ken@~/tmp/fab$]?pwd;ls /Users/ken/tmp/fab fabfile.py???fabfile.pyc??test.py??????test.pyc [ken@~/tmp/fab$]?fab?-f?test.py?lsfab [localhost]?local:?cd?~/tmp/fab [localhost]?local:?ls fabfile.py??fabfile.pyc?test.py?????test.pycDone.

實戰開始:

假設,你每天要提交一份配置文件settings.py到版本庫(這里沒有考慮沖突的情況)

如果是手工操作:

cd?/home/project/test/conf/ git?add?settings.py git?commit?-m?'daily?update?settings.py' git?pull?origin git?push?origin

也就是說,這幾個命令你每天都要手動敲一次,所謂daily job,就是每天都要重復的,機械化的工作,讓我們看看用fabric怎么實現一鍵搞定:(其實用shell腳本可以直接搞定,但是fab的優勢不是在這里,這里主要位后面本地+遠端操作做準備,畢竟兩個地方的操作寫一種腳本便于維護)

from?fabric.api?import?localdef?setting_ci():local("cd?/home/project/test/conf/")local("git?add?settings.py")#后面你懂的,懶得敲了…..

混搭整合遠端操作

這時候,假設,你要到機器A的/home/ken/project對應項目目錄把配置文件更新下來

#!/usr/bin/env?python #?encoding:?utf-8from?fabric.api?import?local,cd,runenv.hosts=['user@ip:port',]?#ssh要用到的參數 env.password?=?'pwd'def?setting_ci():local('echo?"add?and?commit?settings?in?local"')#剛才的操作換到這里,你懂的def?update_setting_remote():print?"remote?update"with?cd('~/temp'):???#cd用于進入某個目錄run('ls?-l?|?wc?-l')??#遠程操作用rundef?update():setting_ci()update_setting_remote()

然后,執行之:

[ken@~/tmp/fab$]?fab?-f?deploy.py?update [user@ip:port]?Executing?task?'update' [localhost]?local:?echo?"add?and?commit?settings?in?local" add?and?commit?settings?in?local remote?update [user@ip:port]?run:?ls?-l?|?wc?-l [user@ip:port]?out:?12 [user@ip:port]?out:Done.

注意,如果不聲明env.password,執行到對應機器時會跳出要求輸入密碼的交互

多服務器混搭

操作多個服務器,需要配置多個host

#!/usr/bin/env?python #?encoding:?utf-8from?fabric.api?import?*#操作一致的服務器可以放在一組,同一組的執行同一套操作 env.roledefs?=?{'testserver':?['user1@host1:port1',],??'realserver':?['user2@host2:port2',?]}#env.password?=?'這里不要用這種配置了,不可能要求密碼都一致的,明文編寫也不合適。打通所有ssh就行了'@roles('testserver') def?task1():run('ls?-l?|?wc?-l')@roles('realserver') def?task2():run('ls?~/temp/?|?wc?-l')def?dotask():execute(task1)execute(task2)

結果:

[ken@~/tmp/fab$]?fab?-f?mult.py?dotask [user1@host1:port1]?Executing?task?'task1' [user1@host1:port1]?run:?ls?-l?|?wc?-l [user1@host1:port1]?out:?9 [user1@host1:port1]?out:[user2@host2:port2]?Executing?task?'task2' [user2@host2:port2]?run:?ls?~/temp/?|?wc?-l [user2@host2:port2]?out:?11 [user2@host2:port2]?out:Done.

擴展

1.顏色

可以打印顏色,在查看操作結果信息的時候更為醒目和方便

from?fabric.colors?import?*def?show():print?green('success')print?red('fail')print?yellow('yellow') #fab?-f?color.py?show

2.錯誤和異常

關于錯誤處理

默認,一組命令,上一個命令執行失敗后,不會接著往下執行

失敗后也可以進行不一樣的處理,?文檔

目前沒用到,后續用到再看了

3.密碼管理

看文檔

更好的密碼管理方式,哥比較土,沒打通,主要是服務器列表變化頻繁,我的處理方式是:

1.host,user,port,password配置列表,所有的都寫在一個文件


或者直接搞到腳本里,當然這個更........


env.hosts = [

'host1',

'host2'


]
env.passwords = {?
'host1': "pwdofhost1",
'host2': "pwdofhost2",

}

?或者

?

env.roledefs = {
'testserver': ['host1', 'host2'],
'realserver': ['host3', ]
}
env.passwords = {
'host1': "pwdofhost1",
'host2': "pwdofhost2",
'host3': "pwdofhost3",?
}?



2.根據key解析成map嵌套,放到deploy中

另外命令其實也可以固化成一個cmds列表的…..

初略就用到這些,后續有更多需求的時候再去撈文檔了,話說文檔里好東西真多,就是太多了,看了暈。。。

The end!


轉載于:https://blog.51cto.com/03301216/1871154

總結

以上是生活随笔為你收集整理的python fabric使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。