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中处理时间之clock()方法的使用
May 22 Python
Python pass详细介绍及实例代码
Nov 24 Python
Python中使用支持向量机SVM实践
Dec 27 Python
Python数据抓取爬虫代理防封IP方法
Dec 23 Python
Python对象转换为json的方法步骤
Apr 25 Python
Python OpenCV之图片缩放的实现(cv2.resize)
Jun 28 Python
Pandas操作CSV文件的读写实现方法
Nov 13 Python
Django models filter筛选条件详解
Mar 16 Python
python爬虫中的url下载器用法详解
Nov 30 Python
python中的被动信息搜集
Apr 29 Python
python实现A*寻路算法
Jun 13 Python
Python开发五子棋小游戏
May 02 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数组函数序列之end() - 移动数组内部指针到最后一个元素,并返回该元素的值
2011/10/31 PHP
解决FastCGI 进程超过了配置的活动超时时限的问题
2013/07/03 PHP
ThinkPHP的截取字符串函数无法显示省略号的解决方法
2014/06/25 PHP
改进UCHOME的记录发布,增强可访问性用户体验
2011/01/17 Javascript
jQuery find和children方法使用
2011/01/31 Javascript
Jquery判断IE6等浏览器的代码
2011/04/05 Javascript
各种常用的JS函数整理
2013/10/25 Javascript
Javascript学习笔记之数组的构造函数
2014/11/23 Javascript
jquery判断复选框选中状态以及区分attr和prop
2015/12/18 Javascript
Jquery和angularjs获取check框选中的值的方法汇总
2016/01/17 Javascript
js+css3实现旋转效果
2017/01/20 Javascript
详解Sea.js中Module.exports和exports的区别
2017/02/12 Javascript
Vue.js上下滚动加载组件的实例代码
2017/07/17 Javascript
图文介绍Vue父组件向子组件传值
2018/02/17 Javascript
Angular路由ui-router配置详解
2018/08/01 Javascript
Vue中 v-if/v-show/插值表达式导致闪现的原因及解决办法
2018/10/12 Javascript
Python wxPython库Core组件BoxSizer用法示例
2018/09/03 Python
命令行运行Python脚本时传入参数的三种方式详解
2019/10/11 Python
Python MySQL 日期时间格式化作为参数的操作
2020/03/02 Python
VSCode基础使用与VSCode调试python程序入门的图文教程
2020/03/30 Python
python 中的9个实用技巧,助你提高开发效率
2020/08/30 Python
Django 用户认证Auth组件的使用
2020/11/30 Python
css3media响应式布局实例
2016/07/08 HTML / CSS
LTD Commodities:礼品,独特发现,家居装饰,家用器皿
2017/08/11 全球购物
Java如何调用外部Exe程序
2015/07/04 面试题
出生证明公证书
2014/04/09 职场文书
《明天,我们毕业》教学反思
2014/04/24 职场文书
企业负责人任命书
2014/06/05 职场文书
退学证明范本3篇
2014/10/29 职场文书
护理工作个人总结
2015/03/03 职场文书
班主任经验交流心得体会
2015/11/02 职场文书
《角的度量》教学反思
2016/02/18 职场文书
PyQt5实现多张图片显示并滚动
2021/06/11 Python
python Tkinter模块使用方法详解
2022/04/07 Python
Java完整实现记事本代码
2022/06/16 Java/Android
MySql统计函数COUNT的具体使用详解
2022/08/14 MySQL