此实例是本人公司真实场景,使用了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. mysql导入文件 日期时间报错:[Err] 1067 - Invalid default value for 'active_time'

    报错原因意思是说:mysql5.7版本中有了一个STRICT mode(严格模式),而在此模式下默认是不允许设置日期时间的值为全0值的,所以想要  解决这个问题,就需要修改sql_mode的值. 修改 ...

  2. 【九度OJ】题目1195:最长&最短文本 解题报告

    [九度OJ]题目1195:最长&最短文本 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1195 题目描述: 输入多行字符串, ...

  3. 【LeetCode】222. Count Complete Tree Nodes 解题报告(Python)

    [LeetCode]222. Count Complete Tree Nodes 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个 ...

  4. Array and Operations

    A. Array and Operations Time Limit: 1000ms Memory Limit: 262144KB 64-bit integer IO format: %I64d    ...

  5. ORA-14450: 试图访问已经在使用的事务处理临时表

    需要对临时表动态添加列,经常碰到表在事务中被使用的情况,如果可以的话,可以现在只用临时表的时候先truncate,这样可以终止事务对当前临时表的占用. execute immediate('trunc ...

  6. 【项目管理】《IT项目管理》Kathy Schwalbe 第2章 IT项目管理和IT背景

    1.对项目管理采取系统的观点有何意义?如何在项目管理中采用系统的观点? 意义:有效处理复杂的环境 采用系统方法,系统分析,系统管理.2.解释组织的四个框架.他们是如何帮助项目经理理解项目的组织环境的? ...

  7. 【操作系统】 DOS命令windows批处理batch编程——第一章

    参考网址: http://docs.30c.org/dosbat/index.html 很多情况下,我们只需要记住一条命令 help ,就能掌握整个DOS命令.比如直接输入 help 可以得到命令的帮 ...

  8. Reliable evaluation of adversarial robustness with an ensemble of diverse parameter-free attacks

    目录 概 主要内容 Auto-PGD Momentum Step Size 损失函数 AutoAttack Croce F. & Hein M. Reliable evaluation of ...

  9. Python Revisited Day 08 (高级程序设计技术)

    目录 8.1 过程型程序设计进阶 8.1.1 使用字典进行分支 8.1.2 生成器表达式与函数 8.1.3 动态代码执行与动态导入 动态程序设计与内省函数(表) 动态代码执行 eval(), exec ...

  10. Kernel PCA for Novelty Detection

    目录 引 主要内容 的选择 数值实验 矩形框 spiral 代码 Hoffmann H. Kernel PCA for novelty detection[J]. Pattern Recognitio ...