развитие питона [семь] --- запрос

haproxy.conf
глобальный 
        журнал 127.0.0.1 local2 
        демон 
        MAXCONN 256 
        журнала 127.0.0.1 Local2 информация по 
умолчанию 
        журнал глобального 
        режима HTTP 
        тайм - аут подключения 5000 мс 
        таймаута клиент 50000ms 
        сервер таймаут 50000ms 
        вариант dontlognull 

слушать статистику: 8888 
        Статистика включить 
        статистику URI / админ 
        Статистика аутентификации администратора: 1234 

фронтэнда oldboy.org 
        связать 0.0.0.0:80 
        вариант httplog 
        вариант httpclose 
        вариант forwardfor 
        войти глобальный
        WWW hdr_reg ACL (хост) -i www.oldboy.org 
        use_backend www.oldboy.org , если WWW 

бэкенд www.oldboy1.org 
        сервер 101.1000.7.9 101.1000.7.9 вес 20 MAXCONN 30 
        сервера 2.2.2.7 2.2.2.7 вес 30 MAXCONN 4000 
        Сервер 10.10.10.1 10.10.10.1 вес 22 MAXCONN 2000 
        сервера 2.2.2.5 2.2.2.5 вес 30 MAXCONN 4000 

бэкенд www.oldboy2.org 
        сервер 3.3.3.3 3.3.3.3 вес 20 MAXCONN 3000 
бэкенд www.oldboy20.org 
        сервер 10.10.0.10 10.10. 0.10 вес 9999 MAXCONN 33333333333

  

импорт ОС

если __name__ == "__main__": # переменная
тзд = "" "
1: Запрос
2: Добавить
3: Измените
4: Удалить
5: Выход
" ""
msf_dic = { "1": FETCH, "2": добавления (), "3": изменение, "4 ": удаление}
    Правда это время: 
Print (MSG)
Выбор = ввод ( "Пожалуйста , введите свои варианты:"). Газа ()
Если нет выбора: Продолжите
IF Choice == "5": BREAK
Данных = входе ( "Пожалуйста , введите ваши данные:" ) .strip ()

############## запрос ####################
Защиту выборки (данные): 
    # печать ( "这是查询功能") 
    backend_data = 'BACKEND% S' % данных 
    с открытым ( "haproxy.conf", "г") , как read_f: 
        тег = False # Тег标识一种状态
        RET = [] 
        для read_line в read_f: 
            если read_line.strip () == backend_data: 
                тег = True 
                продолжать , 
            если тег и read_line.startswith ( "бэкенд"): 
                сломать , 
            если тег: 
                печать (read_line, конец = "") 
                RET. присоединять (read_line) 
    возвращение в отставке

  

############## изменить #################

DEF Change (Data): 
    Print ( "Это функция модификации") 
    Print ( "пользовательский ввод данных", данные) 
    Серверные = Data [0] [ "Серверные"] # файлов между рекордно 
    backend_data = «бэкенд% s "% бэкенд 
    old_server_record =" % sServer% S% S вес% S MAXCONN% S \ п -. "% (" "* 8, данных [0] [" Запись "] [" Сервер "], 
                                                              данные [0] [" Запись "] [" Сервер "], 
                                                              данные [0] [" Запись "] [" вес "], 
                                                              данные [0] [" Запись "] [" The MAXCONN "]) 
    new_server_record =" % sServer% S% S% по весу S MAXCONN% s \ п "% ( " «* 8,Данные [1] [ "запись"] [ "сервер"], 
                                                              данные [1] [ "запись"] [ "сервер"],
                                                              Данные [1] [ "запись"] [ "вес"], 
                                                              данные [1] [ "запись"] [ "MAXCONN"]) 
    печать ( "用户想要修改的记录是", old_server_record) 
    Рез = выборки (бэкенд) 
    если нет разрешения или old_server_record не в разрешении: 
        возвращение "修改记录不存在" 
    другое: 
        индекс = res.index (old_server_record) 
        Рез [индекс] = new_server_record 
    res.insert (0, "% s \ п" % бэкэнд) 
    с открытым ( "haproxy.comf", "г") , как read_f, \ 
        открыт ( "haproxy.comf_new", "ш") , как write_f:
        тег = False 
        has_write = False 
        для read_line в read_f: , 
            если read_line.strip () == backend_data:
                тег = True 
                продолжать
            если тег и read_line.startswith ( "базовая") 
                тег = False , 
            если не помечать: 
                write_f.write (read_line) 
            еще: 
                если не has_write: 
                    для записи в разрешении: 
                        write_f.write (запись) 
                    has_write = True 
    os.rename ( "HAProxy .conf», "haproxy.conf.bak") 
    os.rename ( "haproxy.conf_new", "haproxy.conf") 
    os.remove ( "haproxy.conf.bak")

  

########### ########## развязку и окончательный вариант

импорта ОС 
Защиту записях file_handler (backend_data, разреш = None, тип = "не выборка"): 
    если тип == "выборка": 
        с открытым ( "haproxy.conf", "г") , как read_f: 
            тег = False 
            RET = [] 
            для read_line в read_f: 
                если read_line.strip () == backend_data: 
                    тег = True 
                    продолжать , 
                если тег и read_line.startswith ( "бэкенд"): 
                    сломать , 
                если тег: 
                    печать (read_line, конец = "") 
                    ret.append (read_line) 
        вернуться RET  
    типа Элиф == «изменение»:
        с открытым ( "haproxy.comf", "R"), Как read_f \
            открытый ( "haproxy.comf_new", "ш") , как write_f: 
            тег = False 
            has_write = False 
            для read_line в read_f: 
                если read_line.strip () == backend_data: 
                    тег = True 
                    продолжать , 
                если тег и read_line.startswith ( "базовая" ): 
                    тег = False , 
                если не помечать: 
                    write_f.write (read_line) 
                еще:  
                    если не has_write: 
                        для записи в разрешении: 
                            write_f.write (запись)
                        has_write = True 
    os.rename ( "haproxy.conf", "haproxy.conf.bak") 
    os.rename ( "haproxy.conf_new", «HAProxy .conf ") 
    os.remove (" haproxy.conf.Бака ") 


Защита выборки (данные):
    # Print ( "Это функция поиска") 
    backend_data = 'бэкенд% S' % Данные 
    возврата записи file_handler является (backend_data) 

DEF надстроек) (: 
    Pass 

DEF Change (Data): 
    Print ( "Это функция модификации") 
    Print ( «пользовательский ввод данных "данные) 
    new_server_record = "sServer% вес% S% S% S% S MAXCONN \ п -" ". * 8, данные [1] [" % ( "Запись"] [ "Сервер"],
                                                              данные [1] [ "записи"] [ "сервер"], 
    Серверным = данные [0] [ "базовым"] # файлы между рекордно 
    backend_data = "бэкенд% S" % бэкенд 
    old_server_record = «% sServer% S% S% по весу S MAXCONN% s \ п "% ( " "* 8, данные [0] [" запись "] [ "Сервер"],
                                                              Данные [0] [ "запись"] [ "сервер"], 
                                                              данные [0] [ "запись"] [ "вес"], 
                                                              данные [0] [ "записи"] [ "MAXCONN"]) 
                                                              данные [1] [ "запись"] [ "вес"], 
                                                              данные [1] [ "запись"] [ "MAXCONN"]) 
    печать ( "用户想要修改的记录是", old_server_record) 
    разреш = выборки (бэкенд) , 
    если не разреш или old_server_record не в разрешении: 
        возвращение "修改记录不存在" 
    еще:
        Индекс = res.index (old_server_record) 
        Рез [индекс] = new_server_record
    res.insert (0, "% S \ n-" бэкенд%) 
    записях file_handler являются (backend_data, RES = RES, тип = "Изменить") 


DEF Delete (): 
    Передайте 

ЕСЛИ __name__ == "__main__": # Переменная 
    тзд = "" " 
    1: запрос 
    2: Добавить 
    3: Обзор 
    4: удалить  
    5: Выход 
    "" ".
    msf_dic = { "1": FETCH, "2": на Add (), "3": Изменить, "4": удаление} 


    в то время как True: 
        Print (MSG) 
        выбор = вход ( "Пожалуйста , введите свои варианты:") Strip (). 
        Если нет выбора: Продолжить 
        IF Choice == "5": BREAK 
        в данных = вход ( "Пожалуйста , введите свои данные:"). Strip () 
        ! = IF Choice "1":
            Данные = Eval (данные) структуры данных #eval экстракта строка, строка может быть выполнены их выражение операции 
        RES = msf_dic [Выбор] (данные) 
        печати (РЭС)

  
















----------



рекомендация

отwww.cnblogs.com/liuchunling/p/10950336.html