最近打算使用Python/ target=_blank class=infotextkey>Python實現linux自動化執(zhí)行Shell命令,于是研究了一下Facbic庫,Fabric是一個Python的庫,提供了豐富的同SSH交互的接口,可以用來在本地或遠程機器上自動化、流水化地執(zhí)行Shell命令。非常適合用來做應用的遠程部署及系統維護。簡單易用,只需懂得基本的Shell命令。
fabric幫助網站
目前,從PyPI可以搜索到主要的fabric庫為“ Fabric 2.5.0 ”、“ fabric3 3.1.14 ”和“ Fabric2 2.5.0 ”。
- Fabric:官方Fabric,兼容 Python 2 & Python 3,但不兼容Fabric 1.x的fabfile;
- Fabric2: 與Fabric相同,僅作為平滑遷移(使用Fabric包安裝1.x 版本,使用Fabric2包安裝2.x版本,來實現1.x和2.x的共存);
- Fabric3:是一個基于Fabric 1.x 的fork,兼容Python2 & Python3,兼容 Fabric1.x 的 fabfile;
從pypi網站可以搜索到最新的fabric版本
Fabric 1.x 與2.x版本的主要區(qū)別:
- Fabric 1.x只支持Python2.5-2.7,而Fabric2支持Python (2.7, 3.4+);
- Fabric 2.x是重寫Fabric 1.x的版本,不再兼容1.x 版本的fabfile,而且有些模塊和用法也發(fā)生了很大改變;
問題處理
1 - 導入fabric.api提示報錯“No module named api”
1 >>> from fabric.api import run2Traceback (most recent call last):3 File "", line 1, in 4ImportError: No module named api5 >>>
處理方法:
確認fabric版本信息,“from fabric.api import run”的方式只適用fabric1.x版本。
2 - 運行fabric示例提示報錯“No idea what 'hello' is!”
1$ cat fabfile.py 2# coding:utf-8 3 4 5def hello(): 6print("hello fabric!") 7 8$ fab hello 9 No idea what 'hello'is!1011 $ fab --list12 No tasks found in collection 'fabfile'!
處理方法:
確認fabric版本信息,fabric2.x版本不兼容Fabric 1.x的fabfile。遵照fabric 2.x要求,更改fabfile文件內容格式,重新運行即可。
具體信息可查看:http://docs.fabfile.org/en/2.1/getting-started.html#addendum-the-fab-command-line-tool
下面是我在centos7下面安裝Python2.7+Fabric。
fabric的腳本目錄fabfile.py為腳本,fab.conf是我定義的主機列表