python连接工具的三方库
工作中,在做一些提效的脚本开发时,总会连接一些常用的工具,包括ssl、redis、zookeeper、dubbo、jenkins等
下边我整理了自己的常用的三方库
ssl连接服务器,进行文件交互
import paramiko
#方式一:命令行交互
ssh = paramiko.SSHClient() #创建连接对象
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("xx.xx.xx.xx", 22, "xxx", "xxx") #ip、端口号、用户、密码;建立链接
stdin, stdout, stderr = ssh.exec_command("pwd") #命令行执行命令
result = stdout.read().decode('utf-8') #返回输出结果
print(result)
ssh.close() #关闭链接
#方式二:文件交互
transport = paramiko.Transport(('ip', 22)) #ip/port
transport.connect(username='xxx', password='xxx') #user/pwd 建立链接
ssh = paramiko.SSHClient()
ssh._transport = transport
sftp = paramiko.SFTPClient.from_transport(transport) #sftp连接
sftp.put(localpath, remotepath) #localpath:本地路径 remotepath:远程路径 上传文件
sftp.get(remotepath, localpath) #localpath:本地路径 remotepath:远程路径 下载文件
stdin, stdout, stderr = ssh.exec_command()
result = stdout.read().decode('utf-8')
print(result)
transport.close()
连zk,获取dubbo服务列表
# -*- coding: utf-8 -*-
__author__ = 'felix'
from kazoo.client import KazooClient
import urllib, sys
host = {
"evn1": "10.6.64.96:2181",
"evn2": "172.17.12.253:2181",
"evn3": "172.17.253.253:2181"
}
def get_dubbo_full(evn, serviceName): #返回某服务信息,字典类型{'ip:port': ['serviceName']}
Host = host[evn] #获取不同环境zk地址
zk = KazooClient(hosts="{}".format(Host)) #建立实例
zk.start() #连接
urls = []
list = zk.get_children("dubbo") #获取子节点
for i in list:
if serviceName in i: # 关键字过滤 #查看某个服务
try:
gg = zk.get_children("/dubbo/{}/providers".format(i))
if gg:
for j in gg:
url = urllib.parse.unquote(j)
if url.startswith('dubbo:'):
urls.append(url.split('?')[0].split('dubbo://')[1])
except Exception as e:
print(e)
print(i)
services = {}
for i in urls:
try:
path, service = i.split('/')
if not services.get(path):
services.update({path: []})
services[path].append(service)
except Exception as e:
print(e)
# print(json.dumps(services, indent=4))
return services
def get_service(evn, servicename): #返回某服务信息,字符串类型'ip:port'
services = get_dubbo_full(evn, servicename)
for k, v in services.items():
if servicename in v:
return k
return False
def get_service_ip_port(evn, servicename): #返回某服务所在的ip与端口,数组类型['ip', 'port']
ip_port = get_service(evn, servicename)
if ip_port:
return str(ip_port).split(":")
else:
return "no service"
调用dubbo服务方法(需要自己学习telnet调用dubbo服务)
# -*- coding: utf-8 -*-
__author__ = 'felix'
import socket
import telnetlib
import os
class Dubbo(telnetlib.Telnet):
prompt = 'dubbo>'
coding = 'utf-8'
serv = ''
def __init__(self, ip, port, service, timeout=socket._GLOBAL_DEFAULT_TIMEOUT):
self.serv = service
super().__init__(ip, port)
self.write(b'\n')
def command(self, flag, str_=""):
data = self.read_until(flag.encode())
self.write(str_.encode() + b"\n")
return data
def invoke(self, method_name, arg):
command_str = "invoke {0}.{1}({2})".format(self.serv, method_name, arg)
self.command(Dubbo.prompt, command_str)
data = self.command(Dubbo.prompt, "")
data = data.decode(Dubbo.coding,errors='ignore').split('\n')[0]
return data
def do(self, arg):
command_str = arg
self.command(Dubbo.prompt, command_str)
data = self.command(Dubbo.prompt, command_str)
data = data.decode(Dubbo.coding,errors='ignore').split('\n')[0]
# for i in data:
# print (i.strip())
return data
def ls_l_all(self):
command_str = "ls -l {0}".format(self.serv)
self.command(Dubbo.prompt, command_str)
data = self.command(Dubbo.prompt, "")
data = data.decode(Dubbo.coding,errors='ignore').split('\n')
for i in data:
print(i)
def ls_l_func(self, func_name):
command_str = "ls -l {0}".format(self.serv)
self.command(Dubbo.prompt, command_str)
data = self.command(Dubbo.prompt, "")
data = data.decode(Dubbo.coding,errors='ignore').split('\n')
for i in data:
if func_name in i:
print(i)
break
连接redis(redis相关命令语法、具体操作需要自行学习)
#方式一:直连
import redis
conn = redis.Redis(host=host, port=port)
result = conn.get(key) #获取key信息
#方式二:集群
from rediscluster import StrictRedisCluster
startup_nodes = [ #集群节点
{'host': 'xxx', 'port': 6379},
{'host': 'xxx', 'port': 6379},
{'host': 'xxx', 'port': 6379},
{'host': 'xxx', 'port': 6379},
{'host': 'xxx', 'port': 6379},
{'host': 'xxx', 'port': 6379},
]
rc = StrictRedisCluster(startup_nodes=startup_nodes, decode_responses=True)
result = rc.get(key)
不知则问,不会则学

浙公网安备 33010602011771号