首先是安装fabric包pip install fabric

fabric常用参数

-l : 显示定义好的任务函数名

-f : 指定fab入口文件,默认入口文件名为fabfile.py

-H : 指定目标主机,多台主机用","号分割

fabric常用API

local : 执行本地命令,如:local('uname -s')

lcd : 切换本地目录,如:lcd('/home')

cd : 切换远程目录,如:cd('/etc')

run : 执行远程命令,如:run('free -m')

sudo : sudo方式执行远程命令,如:sudo('touch /abc')

put : 上传本地文件到远程主机,如:put('/hello', '/home/baagee/hello')

get : 从远程主机下载文件到本地,如:get('/home/python/world', '/home/baagee/world')

reboot : 重启远程主机,如:reboot()

@task : 函数装饰器,标识的函数为fab可调用的,非标记的对fab不可见,纯业务逻辑

@runs_once : 函数装饰器,标识的函数只会执行一次,不受多台主机影响

fabric全局属性设定

env.hosts : 定义目标主机,如:env.hosts=['192.168.117.192', '192.168.117.193']

env.user : 定义用户名,如:env.user="root"

env.port : 定义目标主机端口,默认为22,如:env.port="22"

env.password : 定义密码,如:env.password="lijin"

env.passwords : 不同的主机不同的密码,如:env.passwords={'baagee@192.168.117.192:22':'lovelijin', 'lijin@192.168.117.193:22':'lovebaagee'}

简单入门示例

fabfile.pyfrom fabric.api import run

def host_type():

run('uname -s')

执行的话就不能用python fabfile.py执行了要使用:fab -f fabfile.py host_type -H baagee@192.168.117.136

意思就是-f指定文件,后面跟要执行的函数,-H指明登录用户名和host,[root@localhost pythontest]# fab -f fabfile.py host_type -H baagee@192.168.117.136

[baagee@192.168.117.136] Executing task 'host_type'

[baagee@192.168.117.136] run: uname -s

[baagee@192.168.117.136] Login password for 'baagee':

[baagee@192.168.117.136] out: Linux

[baagee@192.168.117.136] out:

Done.

Disconnecting from baagee@192.168.117.136... done.

[root@localhost pythontest]

示例1:动态获取远程目录列表

首先写个小例子熟悉一下这东西到底要怎么用:from fabric.api import *

env.hosts=['192.168.117.136']

env.user='baagee'

env.password = 'ubuntu@2017'

@runs_once

def input_raw():

return prompt("please input directory name:", default="/home")

def workask(dirname):

run('ls -l ' + dirname)

@task

def go():

print('start ...')

getdirname = input_raw()

workask(getdirname)

print('end ...')

go函数是入口函数,首先获取用户输入的路径,然后ls它,显示里面的文件就是这么简单。

执行结果显示:[root@localhost pythontest]# fab -f test3.py go

[192.168.117.136] Executing task 'go'

start ...

please input directory name: [/home] /home/baagee/baagee-blog

[192.168.117.136] run: ls -l /home/baagee/baagee-blog

[192.168.117.136] out: 总用量 24

[192.168.117.136] out: -rw-rw-r-- 1 baagee baagee 0 8月 22 15:05 abcd

[192.168.117.136] out: drwxrwxr-x 6 baagee baagee 4096 8月 3 10:37 Application

[192.168.117.136] out: drwxrwxr-x 2 baagee baagee 4096 8月 3 10:37 DB_back

[192.168.117.136] out: -rw-rw-r-- 1 baagee baagee 1009 8月 3 10:37 index.php

[192.168.117.136] out: drwxrwxr-x 3 baagee baagee 4096 8月 3 10:37 Public

[192.168.117.136] out: -rw-rw-r-- 1 baagee baagee 97 8月 3 10:37 README.md

[192.168.117.136] out: drwxrwxr-x 8 baagee baagee 4096 8月 3 10:37 ThinkPHP

[192.168.117.136] out:

end ...

Done.

Disconnecting from 192.168.117.136... done.

熟悉了之后接下来就是写一个小程序将本地某个文件夹的代码上传到执行服务器,然后执行它;

示例2:上传文件并执行

首先写个小代码:(demo.py)#coding:utf-8

def add(a,b):

print('开始计算a+b')

print(a+b)

add(9,1)

将本机centos7上的demo.py上传到ubuntu上并执行:#coding:utf-8

from fabric.api import *

env.user = 'baagee'

env.hosts = ['192.168.117.136']

env.password = 'ubuntu@2017'

@task

@runs_once

def tar_task():

#进入本地目录

with lcd('/home/vagrant/windowshare/pythontest'):

#打包

local('tar zcvf demo.tar.gz demo.py')

@task

def put_task():

#创建远程服务器文件夹

run('mkdir -p /home/baagee/testdemo')

with cd('/home/baagee/testdemo'):

#上传文件

put('/home/vagrant/windowshare/pythontest/demo.tar.gz', '/home/baagee/testdemo/demo.tar.gz')

@task

def check_task():

#md5验证文件

lmd5 = local('md5sum /home/vagrant/windowshare/pythontest/demo.tar.gz', capture=True).split(' ')[0]

rmd5 = run('md5sum /home/baagee/testdemo/demo.tar.gz').split(' ')[0]

if lmd5 == rmd5:

print('md5 OK ...')

else:

print('md5 ERROR ...')

@task

def run_task():

with cd('/home/baagee/testdemo'):

run('tar zxvf demo.tar.gz')

run('python demo.py')

@task

def go():

tar_task()

put_task()

check_task()

run_task()

步骤就是

1,找到demo.py打包,。2,上传,。3,验证文件md5。4,然后就是解压执行。

也很简单,当然你也可以一次性填写多个host,将他们同时上传到多台服务器上。

最后程序在我centos上执行的效果是:[root@localhost pythontest]# fab -f upload1.py go

[192.168.117.136] Executing task 'go'

[localhost] local: tar zcvf demo.tar.gz demo.py

demo.py

[192.168.117.136] run: mkdir -p /home/baagee/testdemo

[192.168.117.136] put: /home/vagrant/windowshare/pythontest/demo.tar.gz -> /home/baagee/testdemo/demo.tar.gz

[localhost] local: md5sum /home/vagrant/windowshare/pythontest/demo.tar.gz

[192.168.117.136] run: md5sum /home/baagee/testdemo/demo.tar.gz

[192.168.117.136] out: 12b4bed255ad7afb6a53cc84bd7a25e7 /home/baagee/testdemo/demo.tar.gz

[192.168.117.136] out:

md5 OK ...

[192.168.117.136] run: tar zxvf demo.tar.gz

[192.168.117.136] out: demo.py

[192.168.117.136] out:

[192.168.117.136] run: python demo.py

[192.168.117.136] out: 开始计算a+b

[192.168.117.136] out: 10

[192.168.117.136] out:

Done.

Disconnecting from 192.168.117.136... done.

最后结合git完成代码部署:

需要服务器和本地都需要安装git#coding:utf-8

from fabric.api import *

#这两台服务器用户名和密码都一样,所以就不用env.passwords了

env.user = 'baagee'

env.hosts = ['192.168.117.192', '192.168.117.193']

env.password = 'pythontestpass'

@runs_once

@task

def local_update():

#本地代码上传到git

with lcd("/home/baagee/tmp/baageehello"):

local("git add -A")

local("git commit -m 'update'")

local("git pull origin master")

local("git push origin master")

@task

def remote_update():

#服务器将git上的代码拉下来

with cd("/home/baagee/tmp/baageehello"):

run("git checkout master")

run("git pull origin master")

@task

def deploy():

#本地上传

local_update()

#服务器下拉

remote_update()

over。。。。。。。。。。。

python fabric上传文件夹_通过python的fabric包完成代码上传部署(简单版)相关推荐

  1. python读取多个文件夹_在python中如何从不同的文件夹读取多个文件

    我在不同的文件夹中有年度数据文件.每个文件包含从1月1日到12月31日的每日数据.数据文件名类似于AS060419.67,其中最后四位代表年份,即1967年,0604是文件夹名.在 我试图使用下面的代 ...

  2. python如何创建一个文件夹_利用Python怎么创建一个文件夹

    利用Python怎么创建一个文件夹 发布时间:2020-12-08 14:48:04 来源:亿速云 阅读:91 作者:Leah 这期内容当中小编将会给大家带来有关利用Python怎么创建一个文件夹,文 ...

  3. python如何生成excel文件夹_用python脚本通过excel生成文件夹树结构

    大概这样写标题是对的吧... 目标: 通过excel目录结构文档生成文件夹树结构. 也就是: 通过下面的excel 生成下面的文档树结构: 方法: 1.分析:一般文档结构都是事先构思好.可以在txt文 ...

  4. python打开鼠标指定文件夹_学会python文件操作,鼠标好像没用了,学习python第10天...

    电影是人类对未来的向往,在<黑客帝国>中,我们看到了一个数字化的社会,而当你学会python文件操作,你也就离你向往的黑客近一点了,用程序来直接影响电脑上的其他文件,只需要几行代码就搞定. ...

  5. python怎么保存excel文件夹_在Python中保存excel工作簿

    我是Python新手,我需要打开文件夹中的所有excel(一个接一个),等待SAS addin加载新数据,然后保存并关闭它.我试着使用一些库,但无法获得预期的结果.在 使用子流程:import os ...

  6. python内置模块在哪个文件夹_用 Python 内置模块处理 ini 配置文件

    简介 开发人员每天都在处理一些大型而复杂的项目, 而配置文件会帮到我们并节省不少时间.在处理配置文件过程中,无需更改源代码本身,只需要调整配置文件即可访问不同的API接口.更新基础URL信息或其它事情 ...

  7. 码云上传文件夹_码云上传本地文件夹,码云只能上传20个文件的突破方法

    码云官方地址:https://gitee.com/ 很多人不知道码云上传本地文件夹怎么操作,或者如何突破码云只能上传20个文件限制的问题,今天就来说说这事的方法吧. 简介: 码云是媲美GitHub的代 ...

  8. python找不到scripts文件夹_安装python时没有scripts文件夹如何处理

    这次给大家带来安装python时没有scripts文件夹如何处理,处理安装python时没有scripts文件夹的注意事项有哪些,下面就是实战案例,一起来看一下. 安装Python2.7,好多次都不会 ...

  9. 打开ftp服务器上的文件夹时发生错误 操作超时,打开FTP服务器上的文件夹时发生错误。请检测是否有权访问该文件夹...

    只要能解决,分数不是问事 我用IE上输入ftp://....打开后提示 打开FTP服务器上的文件夹时发生错误.请检查是否有权限访问该文件夹. 详细信息: 200 Type ste to A. 227 ...

最新文章

  1. 时间序列预测实例(prophet的血泪史)
  2. 排序方法分析与代码实现
  3. python 最小二乘回归 高斯核_「机器学习」一文读懂线性回归、岭回归和Lasso回归...
  4. 自走棋电脑版_手游版《自走棋》上线试玩
  5. 使用Python合成gif动图
  6. python节点之间的继承关系_python--继承关系
  7. java读取mysql配置文件_MySql主从复制,从原理到实践
  8. 无人驾驶、人脸识别,这些牛X哄哄的技术都是怎么实现的?
  9. AngularJS 的常用特性(四)
  10. 六种实现元素水平居中
  11. 快速入门linux(收藏版)
  12. 第一篇:FC-SAN存储技术
  13. Cocos2d-X 3.x的具体配置详解
  14. 设计模式六大原则(3):里氏替换原则
  15. 威联通212-P 安装远程迅雷,docker安装远程迅雷
  16. mysql取当前月份两位数_SQL获取当前时间月份为两位数
  17. 哈尔滨华夏计算机学院赵娜,赵 娜(ZHAO Na)博士,副教授
  18. Go: 关于锁(mutex)的一些使用注意事项
  19. 3.查询所有同学的学号、姓名、选课数、总成绩
  20. python怎么调用另一个py文件的变量,Python中py文件引用另一个py文件变量的方法

热门文章

  1. ubuntu下装java
  2. nVelocity使用简介
  3. eclipse启动mysql报错_Eclipse+mysql+java Eclipse中运行没有问题,但打包后运行不了,也不报错,求高手指点...
  4. 《4月份数据库技术通讯》.pdf
  5. 新特性:postgresql的vacuum漫谈
  6. 全网呕血整理:关于YOLO v3原理分析
  7. 【华为云技术分享】Python 中的异常和错误
  8. 【鲲鹏来了】华为云鲲鹏弹性云服务器 KC1一文全掌握(2)
  9. 华为云IoT专家直播——构筑智慧路灯实战分享
  10. 怎么在表格中转换html格式,图解Excel与Html格式之间的互相转换