python 實現使用者查詢功能
阿新 • • 發佈:2018-12-10
import os def file_handler(backend_data,res=None,type='fetch'): if type == 'fetch': with open('pll.t','r') as pl: tag=False ret=[] for read_line in pl: if read_line.strip() == backend_data: tag=True continue if tag and read_line.startswith('backend'): # tag=False break if tag: print('\033[1;45m%s\033[0m' %read_line,end='') ret.append(read_line) return ret elif type == 'change': with open('pll.t', 'r') as pl, \ open('haproxy.conf_new', 'w') as write_f: tag = False has_write = False for read_line in pl: # server if read_line.strip() == backend_data: tag = True continue if tag and read_line.startswith('backend'): tag = False if not tag: write_f.write(read_line) else: if not has_write: for record in res: write_f.write(record) has_write = True os.rename('pll.t', 'haproxy.conf.bak') os.rename('haproxy.conf_new', 'pll.t') os.remove('haproxy.conf.bak') def fetch(data): print("\033[1;35m這是查詢功能\033[0m") print('\033[1;33m這是使用者資料\033[0m',data) backend_data='backend %s'%data with open('pll.t','r') as pl: tag=False for read_line in pl: if read_line.strip()==backend_data: tag=True continue if tag and read_line.startswith('backend'): break if tag: print('\33[1;46m%s\33[0m'%read_line,end=' ') def add(): print('這是增加的嗎') def change(data): print("需要改變",data) backend=data[0]['backend'] backend_data = 'backend %s' % backend old_server_record='%s server %s %s weight %s maxconn %s\n'%(' '*8,data[0]['record']['weight'], data[0]['record']['server'], data[0]['record']['weight'], data[0]['record']['maxconn']) new_server_record = '%sserver %s %s weight %s maxconn %s\n' % (' ' * 8, data[1]['record']['server'], data[1]['record']['server'], data[1]['record']['weight'], data[1]['record']['maxconn']) print(old_server_record) res=fetch(backend) print(res) if not res or old_server_record not in res: return "修改記錄不存在" else: index=res.index(old_server_record) res[index]=new_server_record res.insert(0,'%s\n' %backend_data) file_handler(backend_data,res=res,type='change') def delete(): print("這是刪除的") def quit(): print("退出") if __name__ == '__main__': #if __name__ == '__main__' # 就相當於是 Python 模擬的程式入口。Python 本身並沒有規定這麼寫,這只是一種編碼習慣。 # 由於模組之間相互引用,不同模組可能都有這樣的定義,而入口程式只能有一個。到底哪個入口程式被選中,這取決於 __name__ 的值。 msg=''' 1:查詢 2: 新增 3:改變 4:刪除 5:退出 ''' dic_name={'1':fetch, '2':add, '3':change, '4':delete, '5':quit, } while True: print(msg) choice=input('請輸入你的選項:').strip() if not choice:continue if choice=='5':break data=input('請輸入你的資料:').strip() if choice !='1': data=eval(data)#查詢需要用eval轉換成本身的資料型別 res=dic_name[choice](data) print('最終結果',res) # [{'backend':'www.oldboy1.org', 'record':{'server':'2.2.2.4','weight': 20,'maxconn':3000}},{'backend':'www.oldboy1.org','record':{'server':'2.2.2.5','weight':30,'maxconn':4000}}]