haproxy文件操作

import os                                                       #導入os模塊
def search(): #定義查找函數
with open('haproxy.txt','r') as f: #只讀方式打開文件
value = input('請輸入您要查詢的信息:')
backend = 'backend %s' % value #字符串拼接
records = [] #定義空列表
tag = False #將標簽設置為false
for line in f: #循環打開文件
if line.strip() == backend: #當line等于backend,將標簽改為true
tag = True
continue #跳出當前循環
if line.startswith('backend'): #當line以backend開頭,跳出整個循環
break
if tag == True: #標簽為true,將line去除首尾空值,加入到records列表中
records.append(line.strip())
print(records) #打印列表

def add(): #定義add函數
adds = input('請輸入你要添加的內容:')
adds = eval(adds) #將adds轉換為集合
backend = '\nbackend %s \n' % adds['backend'] #拼接字符串
record = ' server {server} {server} weight {weight} maxconn {maxconn}\n'.format(
server = adds['record']['server'],
weight = adds['record']['weight'],
maxconn = adds['record']['maxconn']
)
records =[] #定義records空列表
with open('haproxy.txt','r') as r_file,\
open('haproxy_add.txt','w+') as w_file: #只讀方式打開haproxy,生成新文件haproxy_add
tag = True #標簽設置為true
for r_line in r_file: #循環文件
if r_line.strip() == backend.strip(): #當兩個值相等,
tag = False #將標簽設為false
records = r_file.readlines() #并將這一行的后面所有值加入到records列表中
w_file.write(backend) #將backend寫入新文件
break #跳出for循環
w_file.write(r_line) #將r_line寫入新文件
if tag == True: #當tag為true時
w_file.write(backend) #寫入backend和record
w_file.write(record)
if tag == False: #當tag為false時
if record not in records: #如果record不在records列表內
records.insert(0,record) #把record的值加入到列表的第一個位置
for line in records: #遍歷records列表
w_file.write(line) #將列表的值寫入到新文件
os.rename('haproxy.txt','haproxy.addbak') #將文件備份
os.rename('haproxy_add.txt','haproxy.txt')


def remove(): #定義remove函數
removes = input('請輸入你要刪除的內容:')
removes = eval(removes) #將removes轉換為集合
backend = '\nbackend %s\n' % removes['backend'] #拼接字符串
record = ' server {server} {server} weight {weight} maxconn {maxconn}\n'.format(
server = removes['record']['server'],
weight = removes['record']['weight'],
maxconn = removes['record']['maxconn']
)
with open('haproxy.txt','r') as r_file,\
open('haproxy_remove.txt','w+') as re_file: #只讀方式打開haproxy,生成新文件haproxy_remove
tag = True #定義標簽為True
for r_line in r_file: #遍歷文件
if backend.strip() == r_line.strip() or r_line.strip() == record.strip():
tag = False #當兩個字符串有一個等于r_line時,將標簽改為false
continue #跳出當前循環
if r_line.startswith('backend') or r_line.strip() != record.strip():
tag = True #當r_line開頭為backend或者record不等于r_line時,將標簽改為true
if tag == True: #當標簽為true,寫入新文件
re_file.write(r_line)
os.rename('haproxy.txt','haproxy.removbak') #備份文件
os.rename('haproxy_remove.txt','haproxy.txt')

def alter(): #定義alter函數
alters = input('請輸入你要修改的原的內容:')
alters_new = input('請輸入你要修改的新內容:')
alters = eval(alters) #將兩個值轉為字典
alters_new = eval(alters_new)
backend = '\nbackend %s\n' % alters['backend'] #拼接字符串
record = ' server {server} {server} weight {weight} maxconn {maxconn}\n'.format(
server=alters['record']['server'],
weight=alters['record']['weight'],
maxconn=alters['record']['maxconn']
)
backends = '\nbackend %s\n' % alters_new['backend']
records = ' server {server} {server} weight {weight} maxconn {maxconn}\n'.format(
server=alters_new['record']['server'],
weight=alters_new['record']['weight'],
maxconn=alters_new['record']['maxconn']
)
with open('haproxy.txt', 'r') as r_file, \
open('haproxy_alter.txt', 'w+') as al_file: #只讀方式打開haproxy,生成新文件haproxy_alter
for r_line in r_file: #遍歷文件
if backend.strip() == r_line.strip(): #當原值為輸入的原值,修改為新值
r_line = r_line.replace(backend,backends)
if r_line.strip() == record.strip():
r_line = r_line.replace(record,records)
al_file.write(r_line) #寫入新文件
os.rename('haproxy.txt','haproxy.alterbak') #備份文件
os.rename('haproxy_alter.txt','haproxy.txt')


menu = ['1.查找','2.新增','3.刪除','4.修改','q.退出'] #定義菜單
menu_func = {'1':search, #定義功能字典
'2':add,
'3':remove,
'4':alter,
}
while True: #開始循環
print('-----------------------------------')
for i in menu: #打印菜單
print(i)
choise = input('請選擇您的操作方式(輸入對應編號):')
if choise.isdigit(): #判斷輸入是否為數字
if int(choise) <= len(menu_func) and int(choise) >0: #判斷輸入數字是否在菜單內
menu_func[choise]() #調用功能字典內對應數字的函數
else: #為數字但不再菜單內,提示
print('請輸入對應的編號!\n')
elif choise == 'q': #輸入q退出
print('退出成功!')
break
else: #不為數字提示
print('請輸入對應的編號!\n')




作業有點亂,別噴我!!!!!我盡力了- -



轉載于:https://www.cnblogs.com/judge9/p/6903392.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/370561.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370561.shtml
英文地址,請注明出處:http://en.pswp.cn/news/370561.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

多語言持久性:帶有MongoDB和Derby的EclipseLink

從現在開始&#xff0c;多語種持久性一直是新聞。 從2011年底開始&#xff0c;在著名的Fowler帖子的推動下&#xff0c;我看到了更多更好的主意。 最新的一個是公司內部的學生項目&#xff0c;我們在其中使用Scala作為后端數據&#xff0c;將數據持久存儲到MongoDB&#xff0c;…

web前端開發最佳實踐--(筆記之JavaScript最佳實踐)

如何避免全局變量污染&#xff1f; 避免定義全局變量或全局函數用一個變量進行封裝&#xff0c;并返回外部需要訪問的接口如何寫出高維護的js代碼 配置數據和代碼邏輯分離 如&#xff1a; 改成&#xff1a; ---用js模板mustachehandlebarsjsMVC的數據模式 model&#xff1a;數據…

yum mysql5.7位置_CentOS yum 安裝 Mysql5.7

1 Steps for a Fresh Installation of MySQL# wget https://dev.mysql.com/get/mysql57-community-release-el6-9.noarch.rpm# yum localinstall mysql57-community-release-el6-9.noarch.rpm以上步驟其實是把 MySQL Yum repository 添加到了系統的 repository list 里去了。ll…

HTML/CSS基礎知識(四)

WEB標準和W3C的理解與認識 Web標準是一系列標準的集合。 網頁主要由三部分組成&#xff1a;結構&#xff08;Structure&#xff09;、表現&#xff08;Presentation&#xff09;和行為&#xff08;Behavior&#xff09;。 對應的標準也分三方面&#xff1a;結構化標準語言主要包…

python做一個系統代碼_python初學者,用python3實現基本的學生管理系統代碼實例...

這篇文章分享了管理系統&#xff0c;python學生管理系統的使用&#xff0c;這篇文章非常詳細地介紹了通過示例代碼實現的學生管理系統&#xff0c;該系統對每個人的研究或工作都有一定的參考學習價值。 這個是用python實現的基本的增刪改查的學生管理系統吧&#xff0c;其中主要…

Python入門筆記

Python變量和數據類型 數據類型 print語句 注釋 Python的注釋以 # 開頭&#xff0c;后面的文字直到行尾都算注釋 # 這一行全部都是注釋... print hello # 這也是注釋 什么是變量 定義字符串 字符串可以用或者""括起來表示。 如果字符串本身包含怎么辦&#xff1f;比如…

1058. 選擇題(20)

原題: https://www.patest.cn/contests/pat-b-practise/1058 思路: 本題主要就是怎么讀取數據的問題, 一定要注意scanf函數匹配到 空格或者回車會結束當前變量的賦值, 并且會丟棄這個空格或回車. 關于如何判斷一項答題是否正確, 可以采用循環一個一個判斷, 也可拼成 字符串用st…

使用Spring和Hibernate進行集成測試有多酷

我有罪&#xff0c;直到現在才寫集成測試&#xff08;至少針對數據庫相關事務&#xff09;。 因此&#xff0c;為了消除內感&#xff0c;我閱讀了如何在周末以最少的努力實現這一目標。 提供了一個小示例&#xff0c;描述了如何使用Spring和Hibernate輕松實現這一目標。 通過集…

假設mysql數據表t1有字段_使用ROMA Connect集成數據

概述ROMA Connect支持接入多種類型的數據源&#xff0c;并通過數據集成任務實現源端到目標端的數據集成轉換。ROMA Connect支持相同結構數據之間進行集成轉換&#xff0c;也支持異構數據之間進行集成轉換。本章節通過完成一個SQL Server到MySQL的數據集成配置樣例&#xff0c;幫…

vue-wechat-title

html中的title安裝&#xff1a;npm install vue-wechat-title --save1.在mian.js中//網頁titleimport VueTitle from vue-wechat-title Vue.use(VueTitle);2. 路由中加下 title { path: /, component: Index, meta: { title: 首頁 } }3. 在app.vue 中修改 router-view &a…

如何保證input的輸入值不會隨著提交 而變空_如何對web界面的應用進行測試?

一、輸入框&#xff1a;1、字符型輸入框&#xff1a;&#xff08;1&#xff09;字符型輸入框&#xff1a;英文全角、英文半角、數字、空或者空格、特殊字符“~&#xff01;#&#xffe5;%……&*&#xff1f;[]{}”特別要注意單引號和&符號。禁止直接輸入特殊字符時&…

CentOS6.x下,tomcat - web項目部署

1. 安裝tomcat tomcat安裝方法&#xff1a;http://www.cnblogs.com/vurtne-lu/p/6478440.html 2. 配置tomcat 修改server.xml文件 <!-- 使用 80 端口 (也可以使用其它端口)--> <Connector port"80" protocol"HTTP/1.1"connectionTimeout"200…

dedecms列表頁面隨機縮略圖調用

如果要利用dedecms制作扁平化主題&#xff0c;大概也能夠遇到相似的問題&#xff0c;那就是dedecms的縮略圖機制&#xff0c;在沒有縮略圖的情況下顯示單一的默認圖片&#xff0c;如果是wordpress可以很方便的定義函數調用隨機的縮略圖&#xff0c;即便是在沒有設置縮略圖并且文…

使用地圖觸發功能處理相干事件

本文介紹如何通過使用映射觸發器來處理一致性事件。 基本上&#xff0c;建議使用Oracle Coherence中的分布式數據管理來研究Oracle Coherence API的基本配置和實現。 映射觸發器是Oracle Coherence提供最高度定制的緩存管理系統的最重要功能之一。 MapTrigger代表一個功能代理…

阿里云服務器mysql莫名丟失_mysql數據庫丟失

mysql數據庫丟失云服務器(Elastic Compute Service&#xff0c;簡稱ECS)是阿里云提供的性能卓越、穩定可靠、彈性擴展的IaaS(Infrastructure as a Service)級別云計算服務。云服務器ECS免去了您采購IT硬件的前期準備&#xff0c;讓您像使用水、電、天然氣等公共資源一樣便捷、高…

01-HTML深入

1.1 瀏覽器的工作原理 把一些標簽解析成用戶可視化的頁面 1.2 HTML中的標簽與元素 在HTML中以<xx>開始&#xff0c;以</xx>結束&#xff0c;比如<html></html>等。 標簽和其內容統稱為元素&#xff0c;比如&#xff1a;<xx>h5</xx> 元素…

gitlab使用_使用 Docker 部署 Gitlab

GitLab 是一個用于倉庫管理系統的開源項目&#xff0c;使用Git作為代碼管理工具&#xff0c;并在此基礎上搭建起來的web服務&#xff0c;具有wiki和issue跟蹤功能。GitLab是當前應用非常廣泛的源代碼管理系統。1. 安裝docker引擎并啟動2. 獲取gitlab鏡像包查看下載好的鏡像3. 在…

js--webSocket入門

Websocket 1.websocket是什么&#xff1f; WebSocket是為解決客戶端與服務端實時通信而產生的技術。其本質是先通過HTTP/HTTPS協議進行握手后創建一個用于交換數據的TCP連接&#xff0c; 此后服務端與客戶端通過此TCP連接進行實時通信。 2.websocket的優點 以前我們實現推送技術…

node.js繼承

person.js module.exports function(){   this.name "person";   this.sleep function(){     console.log("sleep in the night");   }   this.eat function(){     console.log(eat food);   }} student.js var util require(&qu…

研究死鎖–第5部分:使用顯式鎖定

在我的上一個博客中&#xff0c;我研究了使用Java的傳統synchronized關鍵字和鎖排序來修復破碎的&#xff0c;死鎖的余額轉移示例代碼。 但是&#xff0c;有一種替代方法稱為顯式鎖定。 這里&#xff0c;將鎖定機制稱為顯式而非隱式的想法是&#xff0c; 顯式表示它不是Java語…