欢迎访问我的网站,希望内容对您有用,感兴趣的可以加入我们的社群。

Python实用模块(九)fabric

实用模块 迷途小书童 5年前 (2019-12-03) 3900次浏览 0个评论

软硬件环境

  • windows 10 64bit
  • anaconada3 with python 3.7.1
  • fabric 2.4.0

fabric

fabric是一个通过SSH来远程执行shell命令的第三方库,对于项目部署及运维人员非常有用,它同时支持python2python3fabric的实现基于InvokeparamikoInvoke实现了命令行的高级接口;而paramiko则实现了SSH协议。

fabric的安装

利用pip安装fabric,安装的同时,会生成命令行工具fab,这个工具我们后面会用到

pip install fabric

fabric的基本使用

先来个fabric中的Hello world.,新建文件名为fabfile.py的源码文件,内容如下

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

"""
@author: Xu Gaoxiang
@license: Apache V2
@email: xugx.ai@gmail.com
@site: https://xugaoxiang.com
@software: PyCharm
@file: fabfile.py
@time: 3/19/2019 2:05 PM
"""

from fabric import task

@task()
def hello(ctx):
    """
    这里的ctx代表的是上下文
    """
    print("Hello Fabric!")

然后在命令行中执行

fab hello

可以在终端看到Hello Fabric!的输出字样。解释下,fabfile.py文件中每个函数就是一个任务,任务名即函数名,如上例中的hellofab命令就是用来执行fabfile.py中定义的任务的,它必须显式地指定任务名。你可以使用参数-l来列出当前fabfile.py文件中定义的所有任务。

fab默认读取fabfile.py中的任务,当然你也可以不使用fabfile.py这个文件,只是需要在执行的时候加上-f $文件名

给任务传参

from fabric import task

@task
def hi(ctx, name, value):
    """
    这里的ctx代表的是上下文, 后面的name和value是需要传递的参数
    """
    print("Hello Fabric! {}={}".format(name, value))

用如下命令执行

fab hi "Year" "2019"

执行结果

Hello Fabric! Year=2019

执行远程命令

from fabric import task
from fabric import Connection

@task
def uname(r):
    """
    ssh到192.168.1.133,然后执行命令uname -a
    """
    c = Connection('192.168.1.133', user='longjing', port=22, connect_kwargs={'password': 'd'})
    c.run('uname -a')

执行结果如下

C:\xugaoxiang\gogs\blog\Python\Modules>fab uname
Linux FR 4.15.0-43-generic #46-Ubuntu SMP Thu Dec 6 14:45:28 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

参考资料

喜欢 (0)

您必须 登录 才能发表评论!