【python】python 模块学习之--Fabric

基础一:

  1. #!/usr/bin/env python
  2. from fabric.api import *
  3. env.user='root'
  4. env.hosts=['218.78.186.162','125.208.12.56']
  5. env.passwords={ 'root@218.78.186.162:22':'XXX','root@125.208.12.56:22':'XXXX@0'}
  6. @runs_once                       ####runs_once代表只执行一次
  7. def local_task():
  8.     local("hostname")            ####local本地任务,不会ssh远程执行
  9. def remote_task():
  10.     with cd("/tmp/"):
  11.         run("hostname")          ###run 远程命令
  12. @task                            ####task标记只有go函数可以调用remote_task函数
  13. def go():
  14.     remote_task()


测试

  1. [root@hostnfsd :/soft/python/pyauto/第七章/fabric]$ fab -f simple1_test.py remote_task    ###直接调用remote_task函数失败
  2. Warning: Command(s) not found:
  3.     remote_task
  4. Available commands:
  5.     go
  6. [root@hostnfsd :/soft/python/pyauto/第七章/fabric]$ fab -f simple1_test.py local_task   ###有task表标识时直接调用local函数失败,meitask时才能直接调用local函数
  7. Warning: Command(s) not found:
  8.     local_task
  9. Available commands:
  10.     go
  11. [root@hostnfsd :/soft/python/pyauto/第七章/fabric]$ fab -f simple1_test.py go         通过go函数调用remote_task函数
  12. [218.78.186.162] Executing task 'go'
  13. [218.78.186.162] run: hostname
  14. [218.78.186.162] out: localhost.localdomain
  15. [218.78.186.162] out:
  16. [125.208.12.56] Executing task 'go'
  17. [125.208.12.56] run: hostname
  18. [125.208.12.56] out: host-192-168-1-56
  19. [125.208.12.56] out:
  20. Done.
  21. Disconnecting from 218.78.186.162... done.
  22. Disconnecting from 125.208.12.56... done.


有时我们希望直接用脚本就可以执行,可以如下更改

  1. #!/usr/bin/env python
  2. from fabric.api import *
  3. env.user='root'
  4. env.hosts=['218.78.186.162','125.208.12.56']
  5. env.passwords={ 'root@218.78.186.162:22':'ESBecs00','root@125.208.12.56:22':'eRaMUnA612@0'}
  6. @runs_once
  7. def local_task():
  8.     local("hostname")
  9. def remote_task():
  10.     with cd("/tmp/"):
  11.         run("hostname")
  12. def go():
        execute(remote_task)           ####execute表示在脚本内执行即可
  13.     execute(local_task)
    go()

直接运行即可
[root@hostnfsd :/soft/python/pyauto/第七章/fabric]$ python simple1_test.py
 

基础2:

  1. #!/usr/bin/env python
  2. from fabric.api import *
  3. env.user='root'
  4. env.hosts=['218.78.186.162','125.208.12.56']
  5. env.passwords={ 'root@218.78.186.162:22':'XXX','root@125.208.12.56:22':'XXXX@0'}
  6. @runs_once
  7. def input_raw():
  8.     return prompt("please input directory name:",default="/home")
  9. def worktask(dirname):
  10.     run("ls -l "+dirname)
  11. @task
  12. def go():
  13.     getdirname = input_raw()
  14.     worktask(getdirname)


跳板机:

  1. #!/usr/bin/env python
  2. from fabric.api import *
  3. from fabric.context_managers import *
  4. from fabric.contrib.console import confirm
  5. env.user='root'
  6. env.gateway='218.78.186.162'
  7. env.hosts=['125.208.12.56']
  8. env.passwords={ 'root@218.78.186.162:22':'XX','root@125.208.12.56:22':'XXXX@0'}
  9. lpackpath="/home/install/lnmp0.9.tar.gz"
  10. rpackpath="/tmp/install"
  11. @task
  12. def put_task():
  13.     run("mkdir -p /tmp/install")
  14.     with settings(warn_only=True):
  15.         result = put(lpackpath, rpackpath)
  16.     if result.failed and not confirm("put file failed, Continue[Y/N]?"):
  17.         abort("Aborting file put task!")
  18. @task
  19. def run_task():
  20.     with cd("/tmp/install"):
  21.         run("tar -zxvf lnmp0.9.tar.gz")
  22.         run("ls -l")
  23. @task
  24. def go():
  25.     put_task()
  26.     run_task()


有时需要将这些功能模板写到django中,那么我们可以将该功能封装到一个类中

  1. #!/usr/bin/env python
  2. from fabric.api import *
  3. class Student(object):
  4.         def __init__(self,user,ip):
  5.                 env.user=user
  6.                 env.hosts=[ip]
  7.                 env.password='XXX'
  8.         @runs_once
  9.         def local_task(self):
  10.                 local("hostname")
  11.         def remote_task(self):
  12.                 vhost=run("df -h")
  13.                 return vhost
  14. def yunxing(user,ip):
  15.     tom=Student(user,ip)
  16.     print execute(tom.remote_task)
  17. yunxing('root','218.78.186.162')   ###直接调用该函数传参即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/89.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在开源框架使用自有数据集的方法-以增量学习工具箱PyCIL为例

回答多位朋友提出的,如何在开源框架使用自有数据集。思路是理解开源代码的设计方法,根据其设计方法增加相应的代码。 具体方法如下: 1.查看开源代码提供者的说明 https://github.com/G-U-N/PyCIL#datasets,这里提供了入手的起点…

带你实现一个github注册页面的星空顶

带你实现一个github注册页面的星空顶 github的注册页面可以说是非常的好看,如果没有看过的可以看下面的图片: 那么要如何实现下面的这个效果呢? 首先我们研究一下他的这个官网 首先我看到的后面的这个背景,是不是一个纯色的背景…

Linux安装Docker完整教程及配置阿里云镜像源

官网文档地址 安装方法 1、查看服务器内核版本 Docker要求CentOS系统的内核版本高于3.10 uname -r #通过 uname -r 命令查看你当前的内核版本2、首先卸载已安装的Docker(如果有) 2.1 确保yum包更新到最新 yum update2.2 清除原有的docker&#xff0c…

02_Fixture定位,Caliper卡尺工具,几何学工具

Fixture定位工具 需求: 测量工件的尺寸 使用Caliper(卡尺)工具 这个时候需要借助Fixture工具 VisionPro中的图像空间 “” 图像的当前空间,即CogImage中的“SelectedSpaceName”表示的名字空间 “#” 像素空间,即坐标原点为图片左上角的坐标空间&am…

TCP/IP协议—MQTT

TCP/IP协议—MQTT MQTT协议MQTT协议特点MQTT通信流程MQTT协议概念 MQTT报文固定报头可变报头有效载荷 MQTT协议 消息队列遥测传输(Message Queuing Telemetry Transport,MQTT)是一个基于客户端-服务器的消息发布/订阅传输协议。它的设计思想…

windows上安装make

下载地址 https://sourceforge.net/projects/gnuwin32/ 点击框中的下载,下载后安装。把安装路径添加到环境变量 PATH 中. 打开cmd,验证是否生效 安装包下载地址: https://download.csdn.net/download/qq_36314864/89163210

python读取DBF数据

DBF文件通常是由数据库软件(如FoxPro或dBASE)创建的数据库文件。Python中并没有直接读取DBF文件的内置库,但你可以使用第三方库如dbfread来读取DBF文件。 首先,你需要安装dbfread库。你可以使用pip来安装: pip insta…

【人工智能书籍分享】从ChatGPT到AIGC:人工智能重塑千行百业

今天又来给大家推荐一本人工智能方面的书籍<从ChatGPT到AIGC&#xff1a;人工智能重塑千行百业>。本书介绍了ChatGPT的前世今生&#xff0c;重点聚焦普通人如何使用ChatGPT获得工作和生活效率的提升&#xff0c;各行各业如何通过ChatGPT来改变自己的赛道状态。 使用Chat…

vue中params和query的区别

用法&#xff1a;query要用path来引入&#xff0c;params要用name来引入&#xff0c;接收参数都是类似的&#xff0c;分别是 this.$route.query.name 和 this.$route.params.name 。 url地址显示&#xff1a;query更加类似于ajax中get传参&#xff0c;params则类似于post&…

免费SSL证书的不香吗?四步轻松搞定

随着技术的发展和普及&#xff0c;现在有许多机构提供免费的SSL证书&#xff0c;使得即便是拥有有限预算的网站也能够享受到基本的加密服务。几乎所有的公有云服务商都提供了免费版ssl&#xff0c;如阿里云曾推出免费型DV SSL证书&#xff0c;腾讯云和百度云也有类似的免费SSL证…

平衡车设计——硬件篇

在本文开始之前我忍不住想吐槽一个事情&#xff0c;就在前两天晚上&#xff0c;我满意地装完平衡车&#xff0c;给他取了个名字叫瓦力&#xff08;没错&#xff0c;就是机器人总动员里的瓦力&#xff09;&#xff0c;他长这个样子。 把他放到桌子上放了一夜&#xff0c;第二天早…

ffmpeg buffer管理

除了内存管理之外&#xff0c;数据的前后级流转也涉及到buffer管理. 个人觉得ffmpeg里面的buffer管理实现极为巧妙&#xff0c;也很值得借鉴. 概述 重要数据结构 AVBufferPool 在libavutil/buffer_internal.h中定义&#xff0c;为内部数据结构&#xff0c;不能在应用程序中直…

基于Java的XxlCrawler网络信息爬取实战-以中国地震台网为例

目录 前言 一、信息网站介绍 1、网站介绍 2、 地震历史信息 3、 历史信息接口分析 二、XxlCrawler组件 1、关于XxlCrawler 2、核心概念介绍 三、实际信息爬取 1、新建maven项目 2、新建model层对象 3、实际爬取 总结 前言 如今&#xff0c;只要谈起网络信息爬取也就…

TCP/IP协议—HTTP

TCP/IP协议—HTTP HTTP协议HTTP通讯特点HTTP通讯流程 HTTP请求报文请求方法 HTTP应答报文状态码 HTTP协议 超文本传输协议&#xff08;Hypertext Transfer Protocol&#xff0c;HTTP&#xff09;是一种请求-响应的协议&#xff0c;用户可以通过HTTP向服务器上传、下载数据。HT…

JavaScript防抖函数执行多个事件处理函数,监听浏览器窗口拖拽事件(Vue防抖函数执行多个事件处理函数)

简介&#xff1a;当用户调整浏览器窗口大小时&#xff0c;浏览器会触发 resize 事件。通常&#xff0c;我们希望在窗口大小改变时执行一些操作&#xff0c;但是如果用户频繁调整窗口大小&#xff0c;可能会导致这些操作被频繁触发&#xff0c;影响页面性能和用户体验。这时候&a…

Java调用WebServices接口

当拿到一个WebServices接口时&#xff0c;首先用接口测试工具调用一下接口&#xff0c;看是否可以正常发送请求和获取返回接口&#xff0c;确保接口是没有问题的&#xff0c;可以用SoapUI工具进行测试。 下面以一个免费的天气预报接口为例&#xff0c;记录整个接口的调用过程。…

初学python记录:力扣2007. 从双倍数组中还原原数组

题目&#xff1a; 一个整数数组 original 可以转变成一个 双倍 数组 changed &#xff0c;转变方式为将 original 中每个元素 值乘以 2 加入数组中&#xff0c;然后将所有元素 随机打乱 。 给你一个数组 changed &#xff0c;如果 change 是 双倍 数组&#xff0c;那么请你返…

Python基础:【练手小实验系列】面向对象编程

文章目录 题目练习题1: 定义一个点类练习题2: 创建一个矩形类练习题3: 银行账户类练习题4: 学生信息管理练习题5: 车辆管理系统参考答案练习题1: 定义一个点类练习题2: 创建一个矩形类练习题3: 银行账户类练习题4: 学生信息管理练习题5: 车辆管理系统题目 练习题1: 定义一个点…

如何解决PPT中获取加载项是灰色的,无法链接到Power BI的问题?

问题描述&#xff1a; 最近有朋友留言询问:“在尝试之前我发布的如何在PPT中展示Power BI报告的操作步骤的时候&#xff0c;想要在PPT中展示Power BI报告&#xff1f;只需这样做&#xff01; (qq.com) 碰到在PowerPoint中【获取加载项选项】是灰色&#xff0c;无法链加载Powe…

CompletableFuture学习

学习目标&#xff1a; 记录学习CompletableFuture的过程 一周掌握 CompletableFuture 学习&#xff1a; CompletableFuture的在工作中的使用 目的&#xff1a; CompletableFuture的使用灵活使用CompletableFuture进行接口优化 使用runAsync&#xff0c;结果无返回值 Execut…