首先让我们首先看一个例子。我们知道在*NIX下面,uname命令是查看系统的发行版。

可以写这样一个Fabric脚本:

from fabric.api import run

def host_type():

run('uname -s')

将上面的脚本保存为fabfile.py,就可以通过fab命令在多个主机上执行host_type脚本了:

$ fab -H localhost,linuxbox host_type

[localhost] run: uname -s

[localhost] out: Darwin

[linuxbox] run: uname -s

[linuxbox] out: Linux

执行过程中可能需要你输入系统密码。

安装

如果你看到这里了,说明你开始对Fabric感兴趣了。但是上述操作在你那里无法执行,因为你还没有安装Fabric。安装Fabric很简单,可以用pip或者easy_install,也可以下载原代码安装。

任务函数

很好,安装Fabric并没有难住你。可能你已经成功的执行了前面的任务,现在让我们更深入一些。

Fabric中的任务就是一个python函数,姑且让我们称之为“任务函数”。既然是python函数,那么对函数的一些用法也适用于任务函数。比如传递参数、互相调用、返回值等等。

首先看一个传递参数的例子:

def hello(name="world"):

print("Hello %s!" % name)

在执行任务的时候,可以通过fab的命令行参数为任务函数传递参数:

$ fab hello:name=Holbrook

Hello Holbrook!

组合任务的例子如下:

from fabric.api import run

def host_type():

run('uname -s')

def hello(name="world"):

print("Hello %s!" % name)

def composite(name="world"):

hello(name)

host_type()

Fabric提供的命令

前面我们见过了fabric.api模块中的run函数,其功能是在远端主机上执行命令。fabric.api中还提供了local函数,用于执行本地(Fabric所在的主机)命令。

如下:

from fabric.api import local

def lslocal():

local('ls')

类似远端命令和本地命令,Fabric也区分远端目录和本地目录。Fabric提供的对远端和本地目录的操作分别是cd和lcd。如果你用过命令行的ftp,这很容易理解。

让我们看一个例子:

def filepath():

remote_dir = '/opt/xxx'

with cd(remote_dir):

run("touch README")

上面代码的功能是进入远端的/opt/xxx目录,并创建一个README文件。

Fabric还提供了很多的命令,比如文件操作等。

管理服务器连接

前面的例子中,都需要在fab命令行参数中指定server。当要管理大量服务器时很麻烦。Fabric提供了环境变量的字典env,其中就包含了hosts字典项,可以定义需要连接的server。

如下:

from fabric.api import env, run

env.hosts = ['host1', 'host2']

def mytask():

run('ls /var/www')

也可以为每个任务单独指定要执行该任务的host列表:

from fabric.api import env, run

def set_hosts():

env.hosts = ['host1', 'host2']

def mytask():

run('ls /var/www')

这样执行 fab set_hosts mytask时,就可以为set_hosts中指定的两个host执行mytask任务了。如果你懒得写函数,在fab命令行中指定也是一样的:

fab mytask:hosts="host1;host2"

为了更方便的执行批量任务,Fabric中还定义了Role,有兴趣可以阅读其官方文档。

管理SSH密码、用户、端口

尽管更推荐使用SSH公钥认证,但是Fabric还是提供了管理密码的机制。Fabric提供了两层密码。

如果你的server有相同的密码,可以在env.password中设置默认的密码;如果server密码不同,还可以在env.passwords中设置(host,password)对,为每个server设置单独的ssh密码。

上面的host字符串采用这种格式:username@hostname:port。所以,在指定ssh密码的同时,也就指定了ssh用户。同密码一样,你也可以在env.user中指定一个默认的用户。如果都没有指定,执行fab命令时会提示你输入密码。

使用Fabric,你可以管理一系列host的SSH连接(包括主机名,用户,密码),定义一系列的任务函数,然后灵活的指定在哪些host上执行哪些任务。这非常使用于需要管理大量host的场景,比如运维,私有云管理,应用自动化部署等。

总结

本文只是一篇入门文档,远没有体现出Fabric的强大。实际上,Fabric还包括大量的功能,比如Role的定义,远程交互及异常处理,并发执行,文件操作等,并且不仅仅局限于命令行方式,可以在你的应用中调用Fabric。

以上就是本文的全部内容了,希望本文的内容能够引起你对Fabric的兴趣,并在你的实际应用中解决问题。如果有疑问大家可以留言交流。

本文标题: 如何利用Fabric自动化你的任务

本文地址: http://www.cppcns.com/jiaoben/python/167145.html

python开发自动化创建一个任务下发到手机_如何利用Fabric自动化你的任务相关推荐

  1. python开发自动化创建一个任务下发到手机_django2 +requests+ddt+unittest+HTMLestRunner接口自动化测试平台...

    Interface_TestPlatform 项目简介: Interface_TestPlatform是基于Python3.6+Django2.0+requests+ddt+unitest+HTMLT ...

  2. python开发自动化创建一个任务下发到手机_python自动化开发问题集

    {"data":{"id":"8000-000000437045-0","name":"SEO专题页栏目分发组 ...

  3. 树莓派Android Things物联网开发:创建一个Things项目

    [转载请注明出处:http://blog.csdn.net/leytton/article/details/77854144] <树莓派Android Things物联网开发>系列文章专栏 ...

  4. 前端开发推荐-创建一个精美的jquery图片库效果

    在Web和图形设计的世界,jquery它是使用最广泛的技术. 在他的帮助下,我们可以创建很多伟大的事情.丰富的jQuery插件,在互联网上,使我们能够毫不费力地创建幻灯片,表格,动画和其他各种良好的效 ...

  5. [Python] set()函数 创建一个无序不重复元素集

    Python set()函数 创建一个无序不重复元素集 功能: set()函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集.差集.并集等. 语法: class set([it ...

  6. 2D游戏开发 - SkyGameEngine2d 创建一个游戏项目

    2D游戏开发 - SkyGameEngine2d 创建一个游戏项目 一.前期准备 二.获取引擎工具 2.1 下载工具集 2.2 解压并且打开工具 三.使用工具 3.1 工具界面介绍 3.2 设置引擎路 ...

  7. python 空dataframe_python 创建一个空dataframe 然后添加行数据的实例

    实例如下所示: import pandas as pd import re import math dframe1 = pd.read_excel("window regulator分析报告 ...

  8. python创建一个txt文件-python中如何创建一个txt文件

    python中有一个内置函数open(),该函数用于打开一个文件,创建一个 file 对象,相关的方法才可以调用它进行读写.如果以只写模式打开一个文件,那么该函数会在文件不存在时创建一个文件. 语法: ...

  9. 用Python和OpenCV创建一个图片搜索引擎的完整指南

    无论你是将个人照片贴标签并分类,或是在公司的网站上搜索一堆照片,还是在为下一篇博客寻找合适的图片.在用文本和关键字来描述图片是非常痛苦的事. 我就遇到了这样的痛苦的事情,上周二我打开了一个很老的家庭相 ...

最新文章

  1. 手机单机游戏合集大概40个G
  2. Linux学习:第四章-vi编辑器
  3. 企业级实战02_SpringMVC整合ActiveMQ 实战需求
  4. 51单片机c语言教程温度计,单片机课程设计-数字温度计.doc
  5. gdb 查看是否 栈溢出_ASLR、DEP与栈保护(HFUT-ZRB#x27;s Task)
  6. 计算机算法设计与分析 租用游艇问题
  7. 图论算法 最短路程_图论与图学习(二):图算法
  8. 搭建vlmcsd KMS服务器
  9. hspice for linux的命令行
  10. linux系统中lib,lib-dev,lib-dbg库的区别
  11. ADC噪声全面分析 -01- ADC噪声的类型以及ADC特性
  12. 【二极管】稳压二极管全面分析
  13. 时空超分辨论文阅读笔记(一)---- Zooming Slow-Mo
  14. MAC怎样显示隐藏文件
  15. java飞机订票系统实例_航空客运订票系统JAVA课程设计
  16. 68个Python内置函数详解,进阶必备
  17. 计算机教室突发事件处理,课堂突发事件处理
  18. Android 实战 - 天气(有缺陷)APP
  19. Oracle问题:如何远程连接Oracle数据库
  20. 区块链如何加快智慧城市建设?

热门文章

  1. TypeScript入门-枚举
  2. java动态网站框架_大型网站动态应用系统架构
  3. Python(3):组的概念
  4. 设置一个DIV固定在底部,并且左右固定,垂直居中
  5. SpringSecurity权限框架实战
  6. Node + ts + puppeteer e2e前端自动化测试
  7. Linux基础命令---文本过滤colrm
  8. 如何在vscode中使用GitLab
  9. spring加载配置文件
  10. zabbix针对目录监控