Python redis-cli.py Python3 redis-cli 命令行管理工具 redis終端工具
由于最近測(cè)試redis未授權(quán)訪問漏洞,發(fā)現(xiàn)本機(jī)沒有安裝redis,不能運(yùn)行redis-cli,于是自己寫了一個(gè)簡單的redis-cli終端,功能并不完整,只是支持簡單的登陸等操作。
mini redis-cli tools
經(jīng)過我的測(cè)試,執(zhí)行簡單的命令還是可以的。
代碼已經(jīng)上傳到github https://github.com/b4zinga/PythonTools/blob/master/redis-cli.py
測(cè)試截圖:

redis-cli.py -h

redis-cli

redis-cli
源代碼:
# !/usr/bin/env python
# coding : utf-8
# Date : 2018-03-20 13:45:00
# Author : b4zinga
# Email : b4zinga@outlook.com
# Function: mini redis-cli tools
import socket
import sys
import re
socket.setdefaulttimeout(3)
def sendCommand(host, port):
sock = socket.socket()
try:
sock.connect((host,port))
except Exception as err:
print(err)
sys.exit(0)
while True:
cmd = input('>')
if cmd == 'exit':
break
cmd = makeCmd(cmd)
try:
sock.send(cmd.encode())
while True:
recv = sock.recv(1024)
print(handleRecv(recv))
if len(recv)<1024: # 循環(huán)接收1024, 如果長度小于1024則默認(rèn)后面已經(jīng)無內(nèi)容,break
break
except Exception as err:
print(err)
sock.close()
def makeCmd(cmd):
command = "*"
cmd = cmd.split()
command = command + str(len(cmd)) + '\r\n'
for c in cmd:
command = command + '$' + str(len(c)) + '\r\n' + c + '\r\n'
return command
def handleRecv(recvdate):
recvdate = recvdate.decode()
if recvdate.startswith('*'):
recvdate=recvdate[2:].strip('\r\n')
recvdate = re.sub('\$\d+\\r\\n', '', recvdate)
return recvdate
if __name__ == '__main__':
usage="""
====================================================
mini redis-cli tools.
Usage:
redis-cli.py <IP> <port>
Default ip 127.0.0.1
Default port 6379
Example:
redis-cli.py 127.0.0.1 6379
redis-cli.py 127.0.0.1 \n
redis-cli.py 192.168.1.133 6378
====================================================
"""
if '-h' in sys.argv or '--help' in sys.argv or len(sys.argv) > 3:
print(usage)
sys.exit(0)
if len(sys.argv) == 1:
sys.argv.append('127.0.0.1')
if len(sys.argv) == 2:
sys.argv.append(6379)
sendCommand(sys.argv[1], int(sys.argv[2]))