python三大神器之fabric

Fabric

Fabric是一个python的远程执行shell的库,同时它也是一个命令行工具。它提供了丰富的同 SSH 交互的接口,可以用来在本地或远程机器上自动化、流水化地执行 Shell 命令。

安装Fabric

Fabric的官网是 www.fabfile.org,源码托管在Github上。你可以clone源码到本地,然后通过下面的命令来安装。但是在源码安装前,你必须先将Fabric的依赖包Paramiko装上。

 
python setup.py develop

同时也可以使用pip安装,因为fabric是python的一个第三方库,只需一条命令即可:

 pip install fabric

python3 安装时使用的是fabric3 :( 安装fabric3之前,需要先卸载fabric.)

  1. # fabric3 支持 python3
  2. pip uninstall fabric
  3. pip3 install fabric3

fabric 不只是一个Python 模块,fabric 还是一个命令行工具,可以使用fab -h查看帮助信息

 
E:\my_data\hk-project>fab -V
Fabric3 1.14.post1
Paramiko 2.4.2
E:\my_data\hk-project>fab -h

入门使用

fabric的使用方式是通过编写一个python文件,该文件中包含多个函数,然后使用fab命令调用这些函数,做相应的任务。这些函数在fabric中称为task。

# filename:abc.py
 ?
 from fabric.api import *
 ?
 def task1():
     print("hello")

 def hello():
     print("hello world")

写好这个python文件后,在当前目录的路径下使用fab工具执行文件中的函数

[[email protected] python文件所在的目录]# fab -f abc.py hello
 hello world
 ?
 # -f 指定fabfile文件,默认为fabfile.py,若文件名是当前目录下的fabfile.py则无需指定

任务参数

此时你可能会想,如果这个函数有参数怎么办呢?应该如何传递参数给函数呢?Fabric 支持 Shell 兼容的参数用法: <任务名>:<参数>, <关键字参数名>=<参数值>,... 用起来就是这样。

 def hello(name="world"):
     print("hello {}".format(name))

我们可以这样去指定参数

$ fab hello:name=Jeff   # 或者 fab hello:Jeff
 hello Jeff
 ?
 Done.

小试牛刀

现在我们假设需要写一个fabfile.py,能够在每次web项目代码更新后使用git提交并远程服务器拉去最新代码并运行,需求描述清楚了,开干吧!

 
# fabfile.py
 # 这里建议将该文件放入项目文件的根目录中,方便git提交
 ?
 from fabric.api import local
 ?
 def test():
     local(‘python manage.py test myapp‘)
     # 测试是否能正常运行

 def commit():
     local(‘git add -p && git commit -m "for test"‘)

 def push():
     local(‘git push‘)

 def prepare_deploy():
     test()
     commit()
     push()

这个 prepare_deploy 任务可以单独调用,也可以调用更细粒度的子任务。

故障

Fabric 会检查被调用程序的返回值,如果这些程序没有干净地退出,Fabric 会终止操作。我们什么都不用做,Fabric 检测到了错误并终止,不会继续执行 commit 任务。

我们也可以对故障进行一定的处理和判断

from fabric.api import local, settings, abort
 from fabric.contrib.console import confirm
 ?
 def test():
     with settings(warn_only=True):
         result = local(‘./manage.py test my_app‘, capture=True)
         # result.return_code返回码(0/1)和result.failed
     if result.failed and not confirm("Tests failed. Continue anyway?"): # confirm判断用户输入
         abort("Aborting at user request.")  # 指定错误退出信息

 # 一个名为 warn_only 的设置(或着说 环境变量 ,通常缩写为 env var )可以把退出换为警告,以提供更灵活的错误处理。如果设置为False,则一条命令运行失败会就会退出,不再执行后面的命令。

建立连接

终于到了连接了,这个工具主要作用就是在远程执行命令呀,学会了这个,我们就可以在本地执行远程服务器的命令了。

from fabric.api import *
 ?
 env.hosts = [‘[email protected]:22‘]
 ?
 def deploy():
     run(‘ls‘)  # run()用于执行远程命令,local()执行本地命令

 # 执行后会提示你输入密码,输入密码即可

至此,入门结束,后续还有更多api的讲解,敬请关注!

参考链接:

fabric官方中文文档:https://fabric-chs.readthedocs.io/zh_CN/chs/tutorial.html

Python 远程部署利器 Fabric 模块详解:https://blog.csdn.net/freeking101/article/details/81103945

原文地址:https://www.cnblogs.com/welisit/p/10995357.html

时间: 2024-10-07 07:53:05

python三大神器之fabric的相关文章

python三大神器之&#39;迭代器&#39;

迭代器: 1.认识迭代器 迭代器是访问集合元素的一种方式.迭代器是一个可以记住遍历的位置的对象.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退. 我们怎样才能判定一个对象是都是可以迭代的呢? 2.可迭代对象 list.tuple.str等类型的数据使用for...in...的循环语法从其中依次拿到数据进行使用,这类对象被称为可迭代对象 3. 如何判断一个对象是否是一个可迭代对象 可以使用 isinstance() 判断一个对象是否是 Iterable 对

python三大神器之virtualenv

http://www.cnblogs.com/freely/p/8022923.html https://blog.csdn.net/weixin_42874054/article/details/83448531 查看pip版本: [email protected]:~$ pip --version pip 19.0.1 from /usr/local/lib/python3.6/dist-packages/pip (python 3.6) 原文地址:https://www.cnblogs.c

shell编程三大神器之sed

shell编程三大神器之awk

shell编程三大神器之grep

ORACLE恢复神器之ODU/AUL/DUL

分享ORACLE数据库恢复神器之ODU.DUL和AUL工具. ODU:ORACLE DATABASE UNLOADER DUL:DATA UNLOADER AUL:也称MyDUL 关于三种工具说明: (1)Oracle 的内部工具是DUL(Data UnLoader).这个需要Oracle 的支持. (2)老熊写的ODU   网址:http://www.oracleodu.com/en/ (3)d.c.b.a (支付宝 楼方鑫)写的AUL. 网址:http://www.anysql.net/do

python 自动化部署工具Fabric简介

自动化部署工具Fabric简介 Fabric就是一个帮助我们在上线时减少重复/繁琐操作的自动化部署利器,对于缺乏成熟运维平台的众多小公司的运维或开发人员来说,掌握这个工具是有必要的. 1. Fabric是什么 Fabric官方文档的描述如下:      Fabric is a Python (2.5-2.7) library and command-line tool for streamlining the use of SSH for application deployment or sy

神器之“c#反编译工具“

1. ".net reflector"本人正在使用,下载地址 2."ILSpy"没实用过,可是听杨中科老师说挺好. 有了这个,妈妈再也不用操心我看不到别人封装好的代码了(^v^) 神器之"c#反编译工具"

Python三大主流框架分析

python三大主流框架 """ Django: 大而全 自带的功能特别特别多 类似于航空母舰 有时候过于笨重 Flask 小而精 自带的功能特别特别少 类似于游骑兵 第三方的模块特别特别多,如果将flask第三方模块全部加起来 完全可以超过django 比较依赖于第三方模块 Tornado 异步非阻塞 牛逼到可以开发游戏服务器 A:socket部分 B:路由与视图函数对应关系 C:模板语法 Django: A用的别人的 wsgiref B自己写的 C自己写的 Flask A