python3 自动打印出最新版本执行的mysql2redis实例


Posted in Python onApril 09, 2020

我就废话不多说了,直接看代码吧!

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 输出 mysql2redis 命令
# __author__ = caozhi
# create_time 2018-11-12,update_time 2019-12-12
# version = 2.0

import os
import re
import sys
import time
import fcntl
import subprocess
import requests

ip = "8.8.8.8"
urlnginxA = "http://8.8.8.8:81/version"
urlnginxB = "http://8.8.8.8:82/version"
defaultversion = {"module":"nginx","ver":"v0.0.0"}

def ApplicationInstance():
  global pidfile
  pidfile = open(os.path.realpath(__file__), "r")
  try:
    fcntl.flock(pidfile, fcntl.LOCK_EX | fcntl.LOCK_NB) #创建一个排他锁,并且所被锁住其他进程不会阻塞
    #print('continue...')
  except:
    print('error', 'The script was executed many times...')
    sys.exit(1)

def getversion(url):
  try:
    nginx_response = requests.get(url, timeout=3)
    if nginx_response.status_code == 200:
      data=nginx_response.json()
    else:
      print('\033[31m 接口响应非200,请重新确认执行,默认忽略本次接口的相应 %s http_code:%s\033[0m'%(url, nginx_response.status_code))
      data = defaultversion

except Exception as e:
  print('\033[31m 接口建联失败,请重新确认,默认忽略本次接口的相应 %s \033[0m'%url)
  print(e)
  data = defaultversion

finally:
  return data

def nginx_version(data):
  version = data['ver'].split('v')[1]
  return version

if __name__ == '__main__':
  ApplicationInstance()
  nginxA_data = getversion(urlnginxA)
  nginxB_data = getversion(urllnginxB)
  print('\033[33m nginxA_version \033[0m %s'%nginxA_data)
  print('\033[33m nginxB_version \033[0m %s'%nginxB_data)

versionA = nginx_version(nginxA_data)
versionB = nginx_version(nginxB_data)
d0=re.split('\.', versionA)
d2=re.split('\.', versionB)
d0=[int(d0[i]) for i in range(len(d0))]
d2=[int(d2[i]) for i in range(len(d2))]
print()

if(d0>d2):
  print('\033[35m nginxA \033[0m这个版本大 v{}'.format(versionA))
  print('\033[36m********* ↓ 这是要执行的mysql2redis的命令 请手动执行↓ ********* \033[0m')
  print('ssh {} "curl -v http://127.0.0.1:81/mysql2redis"'.format(ip))
if(d0<d2):
  print('\033[35m nginxB \033[0m这个版本大 v{}'.format(versionB))
  print('\033[36m********* ↓ 这是要执行的mysql2redis的命令 请手动执行↓ ********* \033[0m')
  print('ssh {} "curl -v http://127.0.0.1:82/mysql2redis"'.format(ip))
if(d0==d2):
  print('\033[35m nginxA和nginxB \033[0m版本一样大 v{}'.format(versionA))
  print('\033[36m********* ↓ 这是要执行的mysql2redis的命令 请手动执行↓ ********* \033[0m')
  print('ssh {} "curl -v http://127.0.0.1:81/mysql2redis"'.format(ip))
print()

补充知识:mysql2redis中LTRIM命令没有效果,用eval命令解决

mysql2redis是一个可以在mysql中执行redis命令的第三方插件,昨天在用它调用命令LTRIM时没有效果:

redis_command_v2('LTRIM', 'UserReadingRecord1', 0, 9)

今天用eval命令试了一下,成功了,哈哈:

redis_command_v2('eval', "redis.call('ltrim', 'UserReadingRecord1', 0, 9)", '0')

以上这篇python3 自动打印出最新版本执行的mysql2redis实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
编写Python脚本抓取网络小说来制作自己的阅读器
Aug 20 Python
python多线程方式执行多个bat代码
Jun 07 Python
基于Python和Scikit-Learn的机器学习探索
Oct 16 Python
Python数据结构与算法之常见的分配排序法示例【桶排序与基数排序】
Dec 15 Python
python flask中静态文件的管理方法
Mar 20 Python
python 通过logging写入日志到文件和控制台的实例
Apr 28 Python
python使用ddt过程中遇到的问题及解决方案【推荐】
Oct 29 Python
python的pyecharts绘制各种图表详细(附代码)
Nov 11 Python
Jupyter Notebook输出矢量图实例
Apr 14 Python
怎么快速自学python
Jun 22 Python
python 定义函数 返回值只取其中一个的实现
May 21 Python
python中的None与NULL用法说明
May 25 Python
python实现处理mysql结果输出方式
Apr 09 #Python
python读取配置文件方式(ini、yaml、xml)
Apr 09 #Python
python数据分析工具之 matplotlib详解
Apr 09 #Python
使用python检查yaml配置文件是否符合要求
Apr 09 #Python
Python第三方包之DingDingBot钉钉机器人
Apr 09 #Python
python实现简单学生信息管理系统
Apr 09 #Python
Pycharm pyuic5实现将ui文件转为py文件,让UI界面成功显示
Apr 08 #Python
You might like
怎样在php中使用PDF文档功能
2006/10/09 PHP
php继承中方法重载(覆盖)的应用场合
2015/02/09 PHP
Yii扩展组件编写方法实例分析
2015/06/29 PHP
javascript 防止刷新,后退,关闭
2010/08/07 Javascript
jQuery中get和post方法传值测试及注意事项
2014/08/08 Javascript
Ajax局部更新导致JS事件重复触发问题的解决方法
2014/10/14 Javascript
javascript实现页面刷新时自动清空表单并选中的方法
2015/07/18 Javascript
js实现Select列表内容自动滚动效果代码
2015/08/20 Javascript
jquery仅用6行代码实现滑动门效果
2015/09/07 Javascript
纯JavaScript手写图片轮播代码
2016/10/20 Javascript
20行js代码实现的贪吃蛇小游戏
2017/06/20 Javascript
基于DOM节点删除之empty和remove的区别(详解)
2017/09/11 Javascript
Vue使用json-server进行后端数据模拟功能
2018/04/17 Javascript
详解webpack 最简打包结果分析
2019/02/20 Javascript
node中实现删除目录的几种方法
2019/06/24 Javascript
JavaScript获取页面元素的常用方法详解
2019/09/28 Javascript
微信小程序 flexbox layout快速实现基本布局的解决方案
2020/03/24 Javascript
[02:08]DOTA2英雄基础教程 马格纳斯
2014/01/17 DOTA
[02:43]DOTA2英雄基础教程 德鲁伊
2014/01/13 DOTA
[02:23]2016国际邀请赛中国区预选赛wings晋级之路
2016/06/29 DOTA
[01:04:48]VGJ.S vs TNC Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
python多线程编程方式分析示例详解
2013/12/06 Python
python+mysql实现简单的web程序
2014/09/11 Python
以Python的Pyspider为例剖析搜索引擎的网络爬虫实现方法
2015/03/30 Python
Python使用修饰器执行函数的参数检查功能示例
2017/09/26 Python
python基础之包的导入和__init__.py的介绍
2018/01/08 Python
解决安装python库时windows error5 报错的问题
2018/10/21 Python
日本食品网上商店:JaponShop.com
2017/11/28 全球购物
回馈慈善的设计师太阳镜:DIFF eyewear
2019/10/17 全球购物
ANINE BING官方网站:奢华的衣橱基本款和时尚永恒的单品
2019/11/26 全球购物
Vector, ArrayList, HashTable, HashMap哪些是线程安全的,哪些不是
2015/10/12 面试题
医院护理人员的自我评价分享
2013/10/04 职场文书
舞蹈专业大学生职业规划范文
2014/03/12 职场文书
机械设计制造及其自动化专业求职信
2014/06/17 职场文书
社区学习党的群众路线教育实践活动心得体会
2014/11/03 职场文书
大学生村官驻村工作心得体会
2016/01/23 职场文书