Python 批处理工具Fabric教程
Author: Vaedit
Time:二〇二一年二月二十日 11:03:52
1 Fabric安装
1.1 环境要求
python == 3.6
系统:Centos 等Linux发行版
1.2 官网
安装
pip install fabric==2.5
2 基础使用
2.1 示例1
from fabric import Connection
from invoke.exceptions import UnexpectedExit
ne = Connection('127.0.0.1')
# 执行命令
ne.run('uname -r')
3.10.0-957.el7.x86_64
<Result cmd='uname -r' exited=0>
# 执行命令不输出
ne.run('uname -r',hide=True)
<Result cmd='uname -r' exited=0>
re=ne.run('uname -r',hide=True)
# 查看退出状态码
re.exited
Out[6]: 0
# 是否执行成功
re.ok
Out[9]: True
# 是否执行失败
re.failed
Out[10]: False
# 标准输出
re.stdout
Out[11]: '3.10.0-957.el7.x86_64\n'
# 错误输出
re.stderr
Out[12]: ''
# 执行的命令
re.command
Out[16]: 'uname -r'
re.connection
Out[17]: <Connection host=127.0.0.1>
# 连接的主机信息
re.connection.host
Out[18]: '127.0.0.1'
# 其他主机连接用法
Connection(host='web1', user='deploy', port=2202)
Connection('deploy@web1:2202')
2.2 示例2
# 推送文件到目标主机,可以结合模板批量生成和推送配置文件
ne.put(‘./xxx.txt’,'/tmp')
# 从目标主机下载文件到本地
ne.get('/tmp/xxx.txt','./')
# 本地执行命令
ne.local()
# 如果执行的命令有可能报错,例如创建用户时已存在或者不关心命令执行的结果,可以用warn=True防止异常自动停止执行任务
ne.run('adduser vaedit',warn=True)
2.3 示例3
主机组的使用
from fabric import ThreadingGroup as tGroup # 并发执行
from fabric import SerialGroup as sGroup # 顺序执行
from fabric import exceptions
gne = sGroup('127.0.0.1','127.0.0.1')
gne1 = tGroup('127.0.0.1','127.0.0.1')
def start(g):
try:
# 主机组暂时没有put和get的功能,如果要使用,则 for ne in gne: ne.put/ne.get
result = g.run('sh start.sh')
for con,result in result.items():
print(con,con.host,result.stdout,result.stderr ,result.ok,result.failed,result.exited)
print(result.succeeded) # 返回成功的 ,可以继续遍历,for con,result in result.succeeded
print(result.failed) # 返回失败的 for con,result in result.failed (如果warn=True,则不管任务成功与否,都全部在result.succeeded,result.failed为空)
except exceptions.GroupException as e:
print(e)