Python的批量远程管理和部署工具Fabric用法实例


Posted in Python onJanuary 23, 2015

本文实例讲述了Python的批量远程管理和部署工具Fabric用法。分享给大家供大家参考。具体如下:

Fabric是Python中一个非常强大的批量远程管理和部署工具,常用于在多个远程PC上批量执行SSH任务.

常见的使用方法大概总结如下:

1. 首先,要将批量执行的任务写入到一个fabfile.py中,

# -*- coding:utf-8 -*-  

  

from fabric.api import run, local, roles, env, cd  

env.hosts=[  

    '192.168.1.110',  

    '192.168.1.111',  

    '192.168.1.112'  

]  

env.user="username"  

env.password="password"  

env.port=22  

#env.parallel=True  

#env.skip_bad_hosts=True  

#env.timeout=1  

#env.warn_only=True  

  

# local用于在本地PC执行命令.  

# run用于在远程PC执行命令.  

def ls():  

    with cd('/home/workspace/project'):  

        local('touch 1.log')  

    with cd('/home/workspace/project2'):  

        local('touch 2.log')   

  

#@parallel, 可以设置是否并行执行  

#@serial  

def pull():  

    with cd('/home/workspace/project'):  

        run('git pull')  

  

def clean():  

    with cd('/home/workspace/project'):  

        run('bash clean.sh')  

 

@hosts('192.168.1.113')  

def robot(device):  

    with cd('/home/workspace/project'):  

        run('bash run.sh %s robot && sleep 1' % device)

以上就是一个简单的fabfile.py, 其中定义的函数均对应一个fab中的可执行命令.
其中有两个小的注意事项:

A.在远程机器的run.sh中如果要执行一些非系统常见的工具,最好指定为绝对路径. 且可以适当地使用nohup的方式.

B.执行其他脚本或者命令后最好加上sleep,以防止Fabric过早地关闭与远程PC连接的session,而导致执行任务失败.

2. 执行过程: fabric执行会默认选取当前目录下的fabfile.py文件,

fab clean

fab pull

fab robot:hosts="192.168.1.115",device=5560

可以通过hosts参数给fabric传入指定的远程PC, 该hosts参数的优先级比env.hosts的要高.

也可以给fab中的命令传递参数,如device.

此外,还可以通过fab -f otherFabFile.py clean来指定其他的fabric文件.

如果需要并行执行的话,也可以传递参数如fab -P -z 15 pull, 15表示并行执行的PC数量.

以上,只是一些简单的用法,如果需要更高级的用法,可以关注该项目的github主页 https://github.com/fabric/fabric.

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
全面解读Python Web开发框架Django
Jun 30 Python
python中正则表达式的使用详解
Oct 17 Python
python正则表达式match和search用法实例
Mar 26 Python
代码分析Python地图坐标转换
Feb 08 Python
numpy.linspace 生成等差数组的方法
Jul 02 Python
详解小白之KMP算法及python实现
Apr 04 Python
Python3.5面向对象与继承图文实例详解
Apr 24 Python
详解python中的线程与线程池
May 10 Python
python multiprocessing多进程变量共享与加锁的实现
Oct 02 Python
python实现飞机大战小游戏
Nov 08 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
Jan 04 Python
Django接收照片储存文件的实例代码
Mar 07 Python
推荐11个实用Python库
Jan 23 #Python
17个Python小技巧分享
Jan 23 #Python
Windows8下安装Python的BeautifulSoup
Jan 22 #Python
Python实现抓取百度搜索结果页的网站标题信息
Jan 22 #Python
Python中使用异常处理来判断运行的操作系统平台方法
Jan 22 #Python
Python实现把utf-8格式的文件转换成gbk格式的文件
Jan 22 #Python
python中实现php的var_dump函数功能
Jan 21 #Python
You might like
PHP Parse Error: syntax error, unexpected $end 错误的解决办法
2012/06/05 PHP
使用php发送有附件的电子邮件-(PHPMailer使用的实例分析)
2013/04/26 PHP
php魔术函数__call()用法实例分析
2015/02/13 PHP
Firefox下提示illegal character并出现乱码的原因
2010/03/25 Javascript
js继承call()和apply()方法总结
2014/12/08 Javascript
jQuery对于显示和隐藏等常用状态的判断方法
2014/12/13 Javascript
使用AngularJS创建单页应用的编程指引
2015/06/19 Javascript
php利用curl获取远程图片实现方法
2015/10/26 Javascript
jquery实现瀑布流效果 jquery下拉加载新数据
2016/12/12 Javascript
详解js的延迟对象、跨域、模板引擎、弹出层、AJAX【附实例下载】
2016/12/19 Javascript
基于node.js之调试器详解
2017/08/22 Javascript
浅谈vuex之mutation和action的基本使用
2017/08/29 Javascript
vue之父子组件间通信实例讲解(props、$ref、$emit)
2018/05/22 Javascript
利用hasOwnProperty给数组去重的面试题分享
2018/11/05 Javascript
微信小程序 JS动态修改样式的实现方法
2018/12/16 Javascript
JS实现秒杀倒计时特效
2020/01/02 Javascript
Vue3新特性之在Composition API中使用CSS Modules
2020/07/13 Javascript
Vue打包部署到Nginx时,css样式不生效的解决方式
2020/08/03 Javascript
vue实现登录、注册、退出、跳转等功能
2020/12/23 Vue.js
python连接mysql数据库示例(做增删改操作)
2013/12/31 Python
使用Anaconda3建立虚拟独立的python2.7环境方法
2018/06/11 Python
Python面向对象之类和对象属性的增删改查操作示例
2018/12/14 Python
python多进程(加入进程池)操作常见案例
2019/10/21 Python
在Python中使用MySQL--PyMySQL的基本使用方法
2019/11/19 Python
Python包,__init__.py功能与用法分析
2020/01/07 Python
html5手机键盘弹出收起的处理
2020/01/20 HTML / CSS
英国领先的运动物理治疗供应公司:Vivomed
2018/07/14 全球购物
全球性的在线鞋类品牌:Public Desire
2019/04/03 全球购物
英国排名第一的停车场运营商:NCP
2019/08/26 全球购物
XMLHttpRequest对象在IE和Firefox中创建方式有没有不同
2016/03/23 面试题
怎样写好自我评价呢?
2014/02/16 职场文书
抄作业检讨书
2014/02/17 职场文书
2014年民政局关于保密工作整改措施
2014/09/19 职场文书
2019预备党员转正申请书模板2篇!
2019/08/07 职场文书
带你学习MySQL执行计划
2021/05/31 MySQL
SpringBoot整合MongoDB的实现步骤
2021/06/23 MongoDB