Pythonの開発[7] ---お問い合わせ

haproxy.conf
グローバル
        ログ127.0.0.1のLOCAL2の
        デーモンは
        256のMAXCONN 
        ログ127.0.0.1 LOCAL2情報の
デフォルトは
        グローバルログ
        モードのHTTP 
        タイムアウトが5000msを接続する
        クライアント50000msタイムアウト
        タイムアウトサーバー50000ms 
        オプションをdontlognull 

統計を聞く:8888の
        統計は、有効
        統計URI /管理者
        1234:統計認証管理

フロントエンドoldboy.orgを
        0.0.0.0:80バインド
        オプションHTTPLOG 
        オプションhttpclose 
        forwardforオプション
        グローバルのログを記録します
        ACLのWWWのhdr_reg(ホスト)-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

  

輸入OS

もし__name__ == "__main__":#変数
MSG = "" "
1:クエリ
2:追加
3:変更
4:削除
5:終了
" ""
msf_dic = { "1"、 "2" FETCH:add()を、 "3":変化、 "4 "}削除
    真の中:
印刷(MSG)
ストリップ():選択はINPUT(「あなたのオプションを入力してください」)=
IFない選択肢を:続行
の選択==「5」のIF:BREAK
データの入力を=(「あなたのデータを入力してください」 ).strip()

##############問い合わせ####################
DEF(データ)をフェッチ:
    #プリント( "这是查询功能")
    backend_data = 'バックエンド%s'は%データ
    read_fとしてオープン( "haproxy.conf"、 "R")を有する:
        タグ= Falseの#タグ标识一种状态
        RET = [] 
        READ_LINEためread_f中:
            もしread_line.strip()== backend_data:
                タグ= Trueの場合
                継続
            の場合、タグとread_line.startswith( "バックエンド"):
                破る
            かのタグ:
                プリント(READ_LINE、エンド= "")
                RET。追加(READ_LINE)
    リターンRET

  

##############変更#################

DEFの変更(データ):
    印刷(「それは修正機能である」)
    を印刷(「ユーザーの入力データがある」、データ)
    バックエンド=データ[0] [「バックエンド」]#ファイルのレコードの中
    backend_data =「バックエンド%sの"%バックエンド
    old_server_record =" %sServer%S%S重量%S MAXCONN%S \ N - "%(" "* 8は、Data [0] ["レコード"] ["サーバ"]、
                                                              DATA [0] ["レコード"] ["サーバ"]、
                                                              DATA [0] ["レコード"] ["重量"]、
                                                              DATA [0] ["レコード"] [" MAXCONN "])
    new_server_record =" %sServer%S%S重量%S MAXCONN%sの\ nは"%( "「* 8、データ[1] [ "記録"] [ "サーバー"]、 
                                                              データ[1] [ "記録"] [ "サーバー"]、
                                                              データ[1]〜[ "レコード"] [ "重量"]、 
        read_fでREAD_LINE用:
                                                              データ[1]〜[ "レコード"] [ "MAXCONN"]) 印刷( "用户想要修改的记录是"、old_server_record)
    RES =(バックエンド)フェッチ
    ない場合RESを又はold_server_recordない解像度で:
        リターン「修改记录不存在" 
    他:
        インデックス= res.index(old_server_record)
        RES [インデックス] = new_server_record 
    res.insert(0、" %sの\ n」%のバックエンド)
    オープンと( ""、 "R" haproxy.comf)read_fとして、\ 
        オープン( "haproxy.comf_new" "W")write_fとして:
        タグ= Falseの
        has_write = Falseの
                タグ= Trueが
                継続します
            read_line.strip()== backend_data場合:
            タグとread_line.startswith場合( "バックエンド")
                タグ= Falseの
            ない場合はタグ付け:
                write_f.write(READ_LINE)
            他に:
                has_writeない場合:
                    :解像度でのレコードの
                        write_f.write(レコード)
                    has_write =真
    os.rename(「haproxy .confの」、 "haproxy.conf.bak")
    os.rename( "haproxy.conf_new"、 "haproxy.conf")
    os.remove( "haproxy.conf.bak")

  

########### ##########デカップリングと最終版

インポートOSの
デフfile_handler(backend_data、RES =なし、タイプ= "フェッチない"):
    タイプ== "フェッチ"場合:
        read_fとして( "haproxy.conf"、 "R")オープンで:
            タグ= Falseの
            RET = [] 
            のためread_fでREAD_LINE:
                :read_line.strip()== backend_dataかの
                    タグ= Trueの場合
                    継続
                タグとread_line.startswith( "バックエンド")場合:
                    ブレーク
                ifタグ:
                    プリント(READ_LINE、エンド= "")
                    ret.append(READ_LINE)
        リターンRETの
    ELIFタイプ== "変更":
        、read_fとして( "haproxy.comf"、 "R")オープン\有する 
                    has_writeない場合:
                        :解像度でのレコードの
                            write_f.write(レコード)
            オープン( "haproxy.comf_new" "W")write_fのように:
            タグ= Falseの
            has_write = Falseの
            read_fでREAD_LINEのため:
                もしread_line.strip()== backend_data:
                    タグ= Trueの場合
                    継続
                の場合、タグとread_line.startswith( "バックエンド" ):
                    タグ= Falseの
                タグ付けされていない場合:
                    write_f.write(READ_LINE)
                他:
                        has_write =真
    os.rename( "haproxy.confを"、 "haproxy.conf.bak")
    os.rename( "haproxy.conf_new"、「haproxy .confの")
    os.remove(" haproxy.conf。BAK」) 


デフデータ(フェッチ):印刷( "それは検索機能である")
    backend_data = 'バックエンド%S' %データ
    リターンfile_handlerある(backend_data)

DEF追加():
    パス

DEFチェンジ(データ):
    印刷( "それは修正機能です")
    プリント( "ユーザによるデータ入力がある"、データ)
    バックエンド=データ[0] [ "バックエンド"]レコードのうち、#ファイル
    backend_data = "バックエンド%S" %バックエンド
    old_server_record =「%sServer%S%S重量%S MAXCONN%S \ n "%( " "* 8、データ[0] ["レコード"]["サーバ"]、
                                                              データ[0] [ "レコード"] [ "サーバ"]、
                                                              DATA [0] [ "レコード"] [ "重量"]、
                                                              DATA [0] [ "レコード"] [ "MAXCONN"]) 
    new_server_record = "sServer%の重量%S%S%S%S MAXCONNする\ n" - "* 8、DATA [1] [" %( "レコード"] [ "サーバ"]、
                                                              データ[1] [ "記録"] [ "サーバー"]、
                                                              データ[1]〜[ "レコード"] [ "重量"]、
                                                              DATA [1] [ "レコード"] [ "MAXCONN"]) 印刷( "用户想要修改的记录是"、old_server_record)
    のRES =フェッチ(バックエンド)
    でない場合RES又はold_server_recordない解像度で:
        リターン"修改记录不存在" 
    他:
        インデックス= res.index(old_server_record)
        RES [インデックス] = new_server_record 
    res.insert(0、 "%S \ N-"バックエンド%)
    file_handlerは(backend_data、RESの=のRES、タイプです= "変更")


DEFの削除():
    パス

IF __name__ == "__main__":#変数
    msgが= "" " 
    1:クエリ
    2:追加
    3:修正
    4:削除
    5:終了します
    。 "" "
    msf_dic = {」1。 ": "2" FETCH:追加()、" 3。 ":変更し、" 4" 。:削除} 


    しばらく真:
        印刷(MSG)
        の選択= INPUT( "入力してくださいオプション:")。ストリップ()
        選択されていない場合:続行を
        選択== "5" IF:BREAK 
        )ストリップ(。:( "あなたのデータを入力してください")=入力したデータを
        IF選択= "1" :! 
            データ=のeval(データ)#evalをデータ構造の文字列を抽出し、文字列がその演算式を実行することができる
        RES = msf_dic [選択](データ)
        を印刷(RES)

  
















----------



おすすめ

転載: www.cnblogs.com/liuchunling/p/10950336.html