想寫好作業,老老實實的一步一步往下看...
raw_input 獲取的用戶輸入是字符串
input_str = raw_input("請輸入內容:") #如: #用戶輸入:123 則 input_str = "123" #用戶輸入:hello 則 input_str = "hello" #用戶輸入:{"k1":123, "k2": "wupeiqi"} 則 input_str = ' {"k1":123, "k2": "wupeiqi"} '
################# raw_input 獲取到的輸入都是字符串、字符串、字符串 !!!!!!! #################
因為raw_input 獲取的是字符串,所以用戶輸入的 ' {"k1":123, "k2": "wupeiqi"} ' 不具有字典的特性,也就不能使用 dic['key'] 來獲取值
如果想要將用戶輸入的內容轉換下格式,
'{"k1":123, "k2": "wupeiqi"}' 字符串轉換成字典類型 "[11,22,33,44]" 字符串轉換成列表類型
################# 當當當當,python的json模塊可以搞搞搞 !!!!!!! #################
json模塊
json模塊的作用之一:根據字符串書寫格式,將字符串自動轉換成相應格式
import json inp_str = "[11,22,33,44]" inp_list = json.loads(inp_str) # 根據字符串書寫格式,將字符串自動轉換成 列表類型 inp_str = ' {"k1":123, "k2": "wupeiqi"} ' # 正確的輸入 切記,內部必須是 雙引號 !!! #inp_str = " {'k1':123, 'k2': 'wupeiqi'}" # 錯誤的輸入 inp_dict = json.loads(inp_str) # 根據字符串書寫格式,將字符串自動轉換成 字典類型
學習json有什么用呢?本次作業可以用上哦!!!!!!!
作業實例:(誰要是再不清楚作業,看我下周帶皮鞭去抽他...)
需求:
老板現在給你任務,公司有haproxy配置文件,希望通過python程序可以對ha配置文件進行增刪改,不再是以往的打開文件進行直接操作了。
現有ha配置文件如下:

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 100.1.7.9 weight 20 maxconn 3000 backend buy.oldboy.org server 100.1.7.90 100.1.7.90 weight 20 maxconn 3000 原配置文件如下
PS:以下只是實例,有好的想法也是可以的!
輸出: 1、獲取ha記錄 2、增加ha記錄 3、刪除ha記錄 num = raw_input('請輸入操作序號:') 如果用戶輸入的 1: read = raw_input('請輸入backend:') 如輸入:www.oldboy.org 講配置文件 backend www.oldboy.org 節點下的所有記錄獲取到,並輸入到終端 如果用戶輸入的 2: read = raw_input('請輸入要新加的記錄:') 如: {"backend": "test.oldboy.org","record":{"server": "100.1.7.9","weight": 20,"maxconn": 30}} # 講read字符串轉換成 字典類型 read_dict = json.loads(read) backend_title = read_dict['backend'] # 去配置文件中找到指定的節點: # backend test.oldboy.org # 如果已經存在, # 則在此節點下添加根據用輸入構造出的記錄,例如: server 100.1.7.9 100.1.7.9 weight 20 maxconn 3000 # 如果不存在, # 則添加backend節點和記錄,例如: backend test.oldboy.org server 100.1.7.9 100.1.7.9 weight 20 maxconn 3000 # (可選)可以再對節點下記錄進行判斷是否已經存在 如果用戶輸入的 3: read = raw_input('請輸入要刪除的記錄:') 如: {"backend": "test.oldboy.org","record":{"server": "100.1.7.9","weight": 20,"maxconn": 30}} # 講read字符串轉換成 字典類型 read_dict = json.loads(read) backend_title = read_dict['backend'] #去配置文件中找到指定的節點,並在刪除指定記錄,如: backend test.oldboy.org server 100.1.7.10 100.1.7.10 weight 20 maxconn 3000 server 100.1.7.9 100.1.7.9 weight 20 maxconn 3000 # 刪除掉 # (可選)如果backend下所有的記錄都已經被刪除,那么將當前 backend test.oldboy.org 也刪除掉。

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 100.1.7.9 weight 20 maxconn 3000 backend buy.oldboy.org server 100.1.7.90 100.1.7.90 weight 20 maxconn 3000