软硬件环境
- windows 10 64bit
- anaconada3 with python 3.7.1
- fabric 2.4.0
fabric
fabric
是一个通过SSH
来远程执行shell
命令的第三方库,对于项目部署及运维人员非常有用,它同时支持python2
和python3
。fabric
的实现基于Invoke和paramiko,Invoke
实现了命令行的高级接口;而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
文件中每个函数就是一个任务,任务名即函数名,如上例中的hello
。fab
命令就是用来执行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