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给我封装的一个比较快捷的读取文件的内 ...
随机推荐
- 【洛谷】【堆+结论】P4597 序列sequence
[题目背景:] 原题cf13c 数据加强版(就是说原来能用DP做现在不行了QwQ) [题目描述:] 给定一个序列,每次操作可以把某个数+1-1.要求把序列变成非降数列.而且要求修改后的数列只能出现修改 ...
- ICC Scenario Definition
现代先进工艺下的后端设计都是在 MCMM 情况下设计的,所谓 MCMM 就是 muti-corner muti-mode,用于芯片的不同工作模式和工作条件. 后端设计过程中,需要保证芯片在所有工作模 ...
- [图解tensorflow源码] [原创] Tensorflow 图解分析 (Session, Graph, Kernels, Devices)
TF Prepare [图解tensorflow源码] 入门准备工作 [图解tensorflow源码] TF系统概述篇 Session篇 [图解tensorflow源码] Session::Run() ...
- [图解tensorflow源码] MatMul 矩阵乘积运算 (前向计算,反向梯度计算)
- 非const引用参数传入不同类型编译不过的理解(拒绝将临时对象绑定为非const的引用的形参是有道理的)
int f (int & I) { cout<<I<<std::endl; } void main() { long L; f(L); // 编译不过 f((int)L ...
- Rendering Engine 主流的浏览器内核(排版引擎、渲染引擎、解释引擎)有哪几种,分别的特点
一.A web browser engine A rendering engine is software that draws text and images on the screen. The ...
- oracle12c创建用户指定表空间
--1.创建临时空间 create temporary tablespace zyj_temp tempfile 'D:\app2\user\virtual\oradata\orcl\zyj_temp ...
- .NET中Quartz任务调度器的简单应用实例
1.首先从NuGet中安装Quartz,安装最新版本就OK 2.新建一个Job类实现Quart中的IJob接口用于执行业务逻辑,代码如下: class CheckUpdateJob : IJob { ...
- flex 自适应
flex-grow.flex-shrink.flex-basis这三个属性的作用是:在flex布局中,父元素在不同宽度下,子元素是如何分配父元素的空间的. 其中,这三个属性都是在子元素上设置的. 注: ...
- python 标准库简介
操作系统接口 os 模块提供了许多与操作系统交互的函数: >>> >>> import os >>> os.getcwd() # Return t ...