• python 使用sqlite,ConfigParser实例


    此实例是本人公司真实场景,使用了VNC,ngrok 技术实现内网穿透,本例是对内网穿透的使用;

    此例的最终效果是对于处于各地内网终端实现远程桌面监控及操作;

    目前世面上也有一些软件实现了内网穿透(向日葵,teamviewer等),是收费的,个人使用还是没有问题的

    关于内网穿透部分将在另一篇,本篇主要说如何使用sqlit及ConfigParser

    SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。 至2015年已经有15个年头,SQLite也迎来了一个版本 SQLite 3已经发布。

    ConfigParser:

    配置文件的格式与windows ini文件类似,可以包含一个或多个节(section),每个节可以有多个参数(键=值)。

    为了更好的理解本文,我们先了解一下配置文件的组成及命名:配置文件(INI文件)由节(section)、键、值组成。

    以下为配置文件格式都是呈键值对形式; (文件名:vnc.cfg ,内容部分已更改,涉及公司信息)

    [comm]
    url = http://test.com/r_2/test/test

    [lived]
    urlopen = /107?content=2

    [dead]
    urlclose = /107?content=5

    ###################读配置文件内容
    import ConfigParser
    
    cfg = ConfigParser.ConfigParser()
    
    cfg.read('vnc.cfg')
    print cfg.sections()
    ##############
    print cfg.options('comm')
    ##############
    print cfg.get('comm','url')
    

    ####################写配置文件

    import ConfigParser
    
    cfg = ConfigParser.ConfigParser()
    
    cfg.add_section('people')
    cfg.set('people','name','test')
    cfg.set('people','age','21')
    with open('test.cfg','w') as fp :
        cfg.write(fp)
    

     效果:

    [people]
    name = test
    age = 21
    #!/usr/bin/env python
    #coding:utf-8
    import sqlite3,os,sys,ConfigParser,urllib2,re
    class Use_sqlite(object):
        def __init__(self):
            self.dbname = "./machines.db"
            self.querytab = "select name from sqlite_master where type='table'"
            self.querycon = "select id,name,machine_id from machines"
            self.urlopen = ""
            self.urlclose = ""
            self.urlcomm = ""
            
    
        def analyze_Config(self):
            count = 0
            config = ConfigParser.ConfigParser()
            config.read("vnc.cfg")
            if os.path.isfile("vnc.cfg"):             #检测配置文件是否存在1
                count += 1
            else:
                print "Please check the file is exist !"
    
            for sections in ['lived','dead','comm']:
                if config.has_section(sections):             #检测文件内容是否有vncpath的session....3
                    count += 1
                else:
                    print "Please check the config sections"
    
            if config.has_option('lived','urlopen'):        #检测是否有触发的URL  1
                count += 1
                self.urlopen = config.get("lived","urlopen")
            else:
                print "Please check the config options"
    
            if config.has_option('dead','urlclose'):          #检测是否有关闭的URL   1
                count += 1
                self.urlclose = config.get("dead","urlclose")
    
            if config.has_option('comm','url'):
                count += 1
                self.urlcomm = config.get("comm","url")        #检查URL内容   1
    
            if count == 7 :
                pass
            else:
                sys.exit()
    
        def cursor_Create(self):    #连接sqlite,并返回游标,给多个函数应用
            conn = sqlite3.connect(self.dbname)
            cursor = conn.cursor()
            return cursor
    
        def menu_Create(self,cursor):  #返回查到的值,用来创建菜单,接收游标实参
            values = cursor.execute(self.querycon).fetchall()
            return values
    
        def print_Menu(self,values):
            for i in values:
                print i[0],"==>",i[1],"==>",i[2]
    
        def choice_User(self,cursor):     #
            choice = raw_input("Please input your choice: ")
            sql = "select machine_id from machines where id=%d "%int(choice)
            values = cursor.execute(sql).fetchall()
            return values[0][0]
    
        def url_Open(self,machineid):
            urlopen = self.urlcomm + machineid + self.urlopen  # 拼接生成触发URL
            print urlopen
            request = urllib2.Request(urlopen)                   #### 以下为发送GET请求到找到的ID
            request.add_header("marker", "manager")
            response = urllib2.urlopen(request)
            mod = r"test.com:[d]{5}"
            portlist = re.findall(mod,response.read())
            print portlist
            return portlist[:2]
    
        def start_VNC(self,port):
            cmd = "vncviewer "+port[0]
            os.system(cmd)
    
        def stop_VNC(self,machineid):
            urlopen = self.urlcomm + machineid + self.urlclose  # 拼接生成触发URL
            print urlopen
            request = urllib2.Request(urlopen)            #### 以下为发送GET请求到找到的ID
            request.add_header("marker", "ma")
            response = urllib2.urlopen(request)
            print response.read()
    
        def main(self):
            self.analyze_Config()
            cursor = self.cursor_Create()
            values = self.menu_Create(cursor)
            self.print_Menu(values)
            machine_id = self.choice_User(cursor)
            vnc_port = self.url_Open(machine_id)
            cursor.close()
            self.start_VNC(vnc_port)
            self.stop_VNC(machine_id)
    
    maomao = Use_sqlite()
    if __name__ == "__main__":
        maomao.main()
    

     以上主要使用了开发人员给的两个接口,一个开,一个关;使用sqlite 也只是从数据库里读取数据而已;

    对于写数据的话,就多了一个方法而已,拿上述的例子来说,如果是更改了数据那么在cursor.close() 方法前加一个conn.commit()对于事务的提交,才能将数据写入数据库;

    希望本文能对大家有所帮助;

  • 相关阅读:
    自动完成
    自动验证[2]
    自动验证[1]
    PHP算法
    用户请求服务器资源过程
    CURD 操作 [2]
    [转]PHP部分常见算法
    CURD 操作 [1]
    常用正则表达式集锦
    centos 6.4 FTP安装和配置
  • 原文地址:https://www.cnblogs.com/Mail-maomao/p/7955534.html
Copyright © 2020-2023  润新知