zoukankan      html  css  js  c++  java
  • 用python -i写交互式shell

    cabinet是公司的一个数据存储服务,需要添加一个shell client,查看数据,做简单操作。

    用python写了一个比想象的简单。代码如下:

    #! /usr/bin/python -i
    # coding: utf-8
    
    
    import sys
    import os
    
    
    dirname = os.path.dirname(sys.argv[0])
    sys.path.append(dirname + '/gen-py') 
    sys.path.append('/usr/lib/python2.7/site-packages')
    from cabinet import CabinetStorage
    from document.ttypes import Document
    from thrift import Thrift
    from thrift.transport import TSocket
    from thrift.transport import TTransport
    from thrift.protocol import TCompactProtocol
    from optparse import OptionParser
    
    
    # avoid UnicodeDecodeError
    reload(sys)
    sys.setdefaultencoding( "utf-8" )
    
    
    try:
      # command line arguments.
      parser = OptionParser(usage="usage: %prog [options]", version="%prog 1.0")
      parser.add_option("-c", "--host", dest = "host", action = "store", default = "127.0.0.1", type = "string", help = "Specify cabinet host.")
      parser.add_option("-p", "--port", dest = "port", action = "store", default = 9090, type = "int", help = "Specify cabinet port.")
      (options, args) = parser.parse_args()
    
    
      # connect to cabinet server.
      transport = TSocket.TSocket(options.host, options.port)  
      transport = TTransport.TBufferedTransport(transport)  
      protocol = TCompactProtocol.TCompactProtocol(transport)  
      client = CabinetStorage.Client(protocol)
      transport.open()
    except Exception as e:
      print e
      os._exit(1)
    
    
    # welcome info.
    print "Cabinet Shell V1.0, Copyright i-MD 2013, All rights reserved."
    print "For usage, invoke help().
    "
    
    
    # main functions.
    def help():
      print "Main functions:"
      print "  get(db, id)"
      print "  set(db, id, val)"
      print "  delete(db, id)"
      print "  unpackDocInfo(docstr)"
      print "  packDocInfo(doc)"
    
    
    def get(db, id):
      return client.Get(db, id) 
    
    
    def set(db, id, val):
      return client.Set(db, id, val)
    
    
    def delete(db, id):
      return client.delete(db, id)
    
    
    def packDocInfo(doc):
      transportOut = TTransport.TMemoryBuffer()
      protocolOut = TCompactProtocol.TCompactProtocol(transportOut)
      doc.write(protocolOut)
      return transportOut.getvalue()
    
    
    def unpackDocInfo(docstr):
      transportIn = TTransport.TMemoryBuffer(docstr)
      protocolIn = TCompactProtocol.TCompactProtocol(transportIn)
      doc = Document()
      doc.read(protocolIn)
      return doc





    不满意的地方是原生的python shell不保存history。

  • 相关阅读:
    散点图增加趋势线
    asp.net自动刷新获取数据
    jQuery在asp.net中实现图片自动滚动
    tornado 学习笔记一:模板
    node.js 学习笔记二:创建属于自己的模块
    mysql 5.6 innodb memcache 操作学习一
    unicode,str
    node.js 学习笔记四:读取文件
    gevent 学习笔记一
    while 循环居然可以用else
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3153248.html
Copyright © 2011-2022 走看看