此实例是本人公司真实场景,使用了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()对于事务的提交,才能将数据写入数据库;

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

python 使用sqlite,ConfigParser实例的更多相关文章

  1. python创建MySQL多实例-1

    python创建MySQL多实例-1 前言 什么是多实例 多实例就是允许在同一台机器上创建另外一套不同配置文件的数据库,他们之间是相互独立的,主要有以下特点, 1> 不能同时使用一个端口 2&g ...

  2. Python操作SQLite数据库的方法详解

    Python操作SQLite数据库的方法详解 本文实例讲述了Python操作SQLite数据库的方法.分享给大家供大家参考,具体如下: SQLite简单介绍 SQLite数据库是一款非常小巧的嵌入式开 ...

  3. python基础——类和实例

    python基础——类和实例 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都 ...

  4. [python]用Python进行SQLite数据库操作

    用Python进行SQLite数据库操作 1.导入Python SQLITE数据库模块 Python2.5之后,内置了SQLite3,成为了内置模块,这给我们省了安装的功夫,只需导入即可~  ]: u ...

  5. python操作sqlite数据库

    root@cacti:~/box# cat convert.py #!/usr/bin/env python import sqlite3,time,rrdtool,os def boxstatus( ...

  6. 使用 Python 的 SQLite JSON1 和 FTS5 扩展

    早在九月份,编程界出现一个名为 json1.c 的文件,此前这个文件一直在 SQLite 的库里面.还有,笔者也曾总结通过使用新的 json1 扩展来编译 pysqlite 的技巧.但现在随着 SQL ...

  7. 【类不类二】Python的类变量与实例变量

    在研究类的时候,难免会有很多疑问,C论坛和博客园高手如云(不知道是不是也美女如云), 搜到了这篇博文,是介绍Python的类变量和实例变量的 ! 刚好在下对self.***这种形式的实例变 量不是很理 ...

  8. Python基础-类变量和实例变量

    Python基础-类变量和实例变量 写在前面 如非特别说明,下文均基于Python3 大纲: 1. 类变量和实例变量 在Python Tutorial中对于类变量和实例变量是这样描述的: Genera ...

  9. Python读取SQLite文件数据

    近日在做项目时,意外听说有一种SQLite的数据库,相比自己之前使用的SQL Service甚是轻便,在对数据完整性.并发性要求不高的场景下可以尝试! 1.SQLite简介: SQLite是一个进程内 ...

随机推荐

  1. centos使用docker安装tomcat8

    下载镜像 docker pull tomcat:8 启动 docker run -d -p 8080:8080 -v /data/tomcat/webapps/:/usr/local/tomcat/w ...

  2. github访问慢处理办法

    Windows 系统:C:\Windows\System32\drivers\etc\hostsLinux 系统:/etc/hostsMac(苹果电脑)系统:/etc/hostsAndroid(安卓) ...

  3. 【LeetCode】1419. 数青蛙 Minimum Number of Frogs Croaking (Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 字典 日期 题目地址:https://leetcode ...

  4. 1046:Square Number

    总时间限制: 1000ms 内存限制: 65536kB 描述 给定正整数b,求最大的整数a,满足a*(a+b) 为完全平方数 输入 多组数据,第一行T,表示数据数.对于每组数据,一行一个正整数表示b. ...

  5. 【剑指Offer】二叉搜索树的第k个结点 解题报告(Python)

    [剑指Offer]二叉搜索树的第k个结点 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-intervie ...

  6. Contrastive Generative Adversarial Networks

    目录 概 主要内容 代码 Kang M., Park J. Contrastive Generative Adversarial Networks. arXiv preprint arXiv 2006 ...

  7. Winform中使用HttpClient与后端api服务进行交互

    前端js可以使用ajax.axios发出http请求 在c#中winform.控制台等可以通过WebRequest.WebClient.HttpClient 有关三个类的性能对比大家可以自己搜一下,这 ...

  8. 编写Java程序,模拟教练员和运动员出国比赛场景,其中运动员包括乒乓球运动员和篮球运动员。教练员包括乒乓球教练和篮球教练。为了方便出国交流,根乒乓球相关的人员都需要学习英语。

    需求说明: 模拟教练员和运动员出国比赛场景,其中运动员包括乒乓球运动员和篮球运动员.教练员包括乒乓球教练和篮球教练.为了方便出国交流,根乒乓球相关的人员都需要学习英语.具体分析如下: (1)共同的属性 ...

  9. go语言 装饰器模式

    package decoratorimport ( "fmt" "reflect")func Decorator(decoPtr, fn interface{} ...

  10. python 根据传进来的参数,动态拼接sql

    根据传进来的参数,动态拼接sql,可用于实现一个方法,有些字段不确定,又用到的情况,如查询,三个查询条件,有的时候只用到一个查询条件,其他用不到则不需要拼接 def show_runjob_detai ...