python编辑修改haproxy配置文件--文件基础操作
一.需求分析
- 有查询,删除,添加的功能
- 查询功能:查询则打印查询内容,如果不存在也要打印相应的信息
- 删除功能:查询到要删除内容则删除,打印信息。
- 添加功能:同上。
二.流程图

三.代码实现
本程序主要分成两部分,接口部分与主函数处理部分,接口部分主要是用于编写三个接口,添加、删除、查询接口,此部分程序存储在Data_Deal.py函数中,主函数程序则执行系统的主循环逻辑,主要是上图流程图中的接口调用部分,此部分程序主要在Data_Change.py中实现,话不多说,上代码:
Data_Deal.py函数程序代码如下:
import sys
def Check_Backend():
#数据查询接口
Backend = str(input("输入要查询的Backend :"))
Backend_split = 'backend '+Backend+'\n'#根据输入内容组成要查询的字符串
T =True
with open('song.txt','r') as f:#文件循环
for line in f:
if Backend_split in line :#条件判断
sys.stdout.write(line)
T= False
continue
if T==False:
sys.stdout.write(line)
break
if T ==True:
print("文件不存在 !") def Add_Backend():
#数据添加接口
T =True
msg =eval(input("输入要存入的数据 :"))#字符串转换成列表,这里注意eval函数,此函数可以将字符串转换成字典,前提是字符串内容是一个字典
with open('song.txt','a+') as f:#文件循环
f.seek(0)#移动文件指针
for line in f:
if "backend "+msg["backend"]+'\n'== line:
print("当前Backend已存在,存入失败 !")
T = False
break
if T == True:
stradd = '\nbackend '+msg['backend']+'\n'+'\t'.expandtabs()+'server '+\
msg['record']['server']+' weight '+str(msg['record']['weight'])+' maxconn '+str(msg['record']['maxconn'])+'\n'#组帧,写入数据要按照一定格式转换成字符串
f.write(stradd)
print("添加成功 !") def Del_Backend():
#数据删除接口
local = 0
T = False
F = False
Num=0
msg =eval(input("输入要删除的数据 :"))#字符串转换成列表
f = open('song.txt', 'r+')#读写模式打开文件
lines = f.readlines()#一次读出所有行
f.seek(0)#移动文件指针
f.truncate()#清除文件内容
for i,line in enumerate(lines):
if T==True:
Num+=1
if Num>=2:
T=False
print("删除成功 !")
F =True
else:
continue
if line == 'backend '+msg['backend']+'\n':
T =True
Num=0
continue
f.write(line)#逐行写入文件,如果遇到要删除的内容则不写入
if F==False:
print("数据库中没有此条数据,删除失败!")
此文件的读写要特别读写后的读写指针的位置,文件的操作如果读写指针有误可能导致文件出错,删除接口要特别注意,本函数使用较为笨拙的方案,一次读出所有数据然后比对写入,这种方案的前提是文件相对较小,如果大文件的读写删除不建议使用此方法。
Data_Change.py程序代码如下:
while True:
msg = input("1.查询\n2.删除\n3.添加\n,输入q退出程序,请输入你的选择 :")
if msg.isdigit():
msg=int(msg)
if msg==1:
Check_Backend()
elif msg==2:
Del_Backend()
elif msg==3:
Add_Backend()
else:
pass
elif msg=='q':
break
else:
pass
haproxy文件文本内容如下:
global
log 127.0.0.1 local2
daemon
maxconn 256
log 127.0.0.1 local2 info
defaults
log global
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
option dontlognull
listen stats :8888
stats enable
stats uri /admin
stats auth admin:1234
frontend oldboy.org
bind 0.0.0.0:80
option httplog
option httpclose
option forwardfor
log global
acl www hdr_reg(host) -i www.oldboy.org
use_backend www.oldboy.org if www
backend www.oldboy.org
server 100.1.7.9 weight 20 maxconn 30
backend www.koujie.org
server 100.1.7.9 weight 2000 maxconn 3000
数据输入格式如下:
#1、查
# 输入:www.oldboy.org
# 获取当前backend下的所有记录 #2、新建
#输入:
#arg =
{
'bakend': 'www.oldboy.org',
'record':{
'server': '100.1.7.9',
'weight': 20,
'maxconn': 30
}
} #3、删除
#输入:
# arg =
{
'bakend': 'www.oldboy.org',
'record':{
'server': '100.1.7.9',
'weight': 20,
'maxconn': 30
}
}
python编辑修改haproxy配置文件--文件基础操作的更多相关文章
- Python文件基础操作(IO入门1)
转载请标明出处: http://www.cnblogs.com/why168888/p/6422270.html 本文出自:[Edwin博客园] Python文件基础操作(IO入门1) 1. pyth ...
- 小白学 Python(23):Excel 基础操作(上)
人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...
- 小白学 Python(24):Excel 基础操作(下)
人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...
- s12-day03-work01 python修改haproxy配置文件(初级版本)
#!/usr/local/env python3 ''' Author:@南非波波 Blog:http://www.cnblogs.com/songqingbo/ E-mail:qingbo.song ...
- python flask学习(1)与Git基础操作
今天从简单的flask开始完成Flask web开发的学习.今天学习了Git和GitHub项目的提交. Git尝试提交过程中出现了"Could not read from remote re ...
- Python3.5 day3作业二:修改haproxy配置文件。
需求: 1.使python具体增删查的功能. haproxy的配置文件. global log 127.0.0.1 local2 daemon maxconn 256 log 127.0.0.1 lo ...
- Python入门笔记(16):对文件的操作(2)
一.文件系统 从系统角度来看,文件系统是对文件存储器空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统.具体地说,它负责为用户建立文件,存入.读出.修改.转储文件,控制文件的存取,当用 ...
- Python入门笔记(15):对文件的操作(1)
一.文件对象 我理解的文件对象就是一个接口,通过这个接口对文件进行相关操作. <Python 核心编程>上说的很晦涩,这里没有深刻理解到,希望有人能解释给我听. >>> ...
- php之文件基础操作
在php中对文件的基础操作非常的简单,php提供的函数粗略的用了一遍. file_get_contents():可以获取文件的内容获取一个网络资源的内容,这是php给我封装的一个比较快捷的读取文件的内 ...
随机推荐
- Azkaban时区问题导致调度差1天
设置了Azkaban调度是每日凌晨一次,如下: 但是调度历史上显示最近一次调度时间是 初步怀疑是因为时区问题导致,查看服务器时区如下 cat /etc/timezone 为Asia/Shanghai. ...
- DIV+CSS:如何编写代码才能更有效率
如何编写CSS代码才能更有效率?这是许多网页制作者与开发者都关心的问题.大概没有什么魔法,可以保证一下就把你的样式表缩小到百分之多少,但合理的 CSS 编码与组织技巧,的确能够帮助你的更有效率地写出更 ...
- loli的搜索测试-4
其实这已经是第四次搜索测试了...只不过上两次测试时我不在学校,扔两个链接吧: 测试-2:https://www.luogu.org/blog/user35178/loli-di-sou-suo-ce ...
- 检查oracle用户默认密码的账户
1. 检查使用默认用户密码的账号 --11g 通过数据字典SYS.DEFAULT_PWD$或视图DBA_USERS_WITH_DEFPWD select u.username, u.account_s ...
- 20145203盖泽双 《Java程序设计》第6周学习总结
20145203盖泽双 <Java程序设计>第6周学习总结 教材学习内容总结 1.如果要将数据从来源中取出,可以使用输入串流,若将数据写入目地, 可以使用输出串流.在java中,输入串流代 ...
- Python之Pulsar框架使用
本文内容主要包含Pulsar的介绍和安装.初步使用.应用.常见示例等. 一. 介绍和安装 Pulsar是Python事件驱动并发框架:Pulsar具有高扩展性.高可用性的框架,它能够基于事件驱动的开源 ...
- js之点击值发生变化
点击值发生变化,应用场景,比如像阿里云那样我通常密码是以******的形式存在,我必须要点击查看,它才会以明文显示. 在实际开发中,比如以智能门锁为例,安装门锁时,有个叫密码输入框的表单,这个是选填项 ...
- 论文笔记 CVPR-2014 DeepReID Deep filter pairing neural network for person re-identification
1. 摘要 第一篇用深度学习做Reid的文章,提出的FPNN采用端到端的训练方式,解决行人再识别的不对齐,光照,姿态等问题. 建立了一个新的带benchmark的数据集CUHK03,表现性能良好. 2 ...
- HTML5 新增内容
1. 新增标签 音频 <audio> <source src=""/> </audio> 视频 <video> <source ...
- 使用C语言给php写扩展
1.在php源码路径的ext文件夹下,新建一个extend_test.def文件,编辑文件内容为 string my_test_function(string str,int n) 2.在当前目录执行 ...