Pythonサーバ管理ツールの実装

4094 ワード

簡単なサーバー管理ツール(コマンドラインツール)を実現し、ツールパスは/xxx/xxx/serverである.py、このツールは以下の機能をサポートするだけです.
1.機能説明
サーバの追加(addコマンド):次のパラメータ-h hostip,-u user,-p passwordをサポートします.3つのパラメータは記入する必要があります.そうしないと、エラーが発生します.例:server.py add -h 127.0.0.1 -u abc -p abc. ≪サーバーのリスト|List Server|ldap≫(listコマンド):パラメータがなく、現在格納されているすべてのサーバー情報がリストされます.例:server.py list、出力例:$server.py list 127.0.0.1 abc abc 192.168.1.1 ubuntu password削除サーバ(delete):パラメータ-h hostipをサポートします.例:server.py delete -h 127.0.0.1.成功したら出力なし
2.需要サーバー情報を保存するには、データベースを使用しないで、ファイルの場所/home/shiyanlou/serverinfoを保存する必要があります.フォーマットは制限されません.
3.異常処理は以下の異常を処理するだけで、処理方式は1本のERROR:啓示のエラー情報を返すだけである.
パラメータが不足しています.例:server.py add-h 127.0.0.1-u abcコマンドはサポートされていません.例えば、server.py test server.py add時にサーバが追加されました.たとえば、同じパラメータのaddコマンドを2つ連続して実行します.
#!/usr/bin/python

import os,sys

class Server:

    def __init__(self,serverfile):
        self.serverfile = serverfile
    
#        
    def addserver(self,hostip,user,password):
        try:
        #              ,     ,   ,       
           ipargv = []
           flag = 0
           f = open(self.serverfile,'r')
           lines = f.readlines()
           #     
           for line in lines:
               if not line:
                  break
               ipargv = line.split()
               if len(ipargv) > 0:
                  if ipargv[0] == hostip:
                     flag = 1
                     f.close()
                     break
 
           if flag == 0:
               with open(self.serverfile,'a') as sf:
                   sf.write(hostip + ' ' + user + ' ' + password +'
') else : raise redunError(' ip !') except IOError: print('serverinfo.txt !') except redunError as err: print(err) def delserver(self,hostip): # , , with open(self.serverfile, 'r') as r: lines = r.readlines() with open(self.serverfile, 'w') as w: for l in lines: if hostip not in l: w.write(l) break def serverlist(self): try: with open(self.serverfile,'r') as sf: str = sf.read() return str except IOError: print('serverinfo.txt !') # class lackError(Exception): def __init__(self, value): self.value = value def __str__(self): return repr(self.value) class redunError(Exception): def __init__(self, value): self.value = value def __str__(self): return repr(self.value) class commandError(Exception): def __init__(self, value): self.value = value def __str__(self): return repr(self.value) serverfile = '/xxx/xxxxx/serverinfo.txt' server = Server(serverfile) # if len(sys.argv) >= 8: try: if sys.argv[0] == 'server.py' and sys.argv[1]=='add' and sys.argv[2]=='-h' and sys.argv[4]=='-u' and sys.argv[6]=='-p': hostip = sys.argv[3] user = sys.argv[5] password = sys.argv[7] server.addserver(hostip,user,password) else: raise lackError(' !') except lackError as e: print(e.value) elif len(sys.argv) >= 2 and len(sys.argv) <8: try: if sys.argv[0] == 'server.py' and sys.argv[1]=='list': servlist = server.serverlist() print(servlist) # elif sys.argv[0] == 'server.py' and sys.argv[1] =='delete': server.delserver(sys.argv[3]) # elif sys.argv[0] == 'server.py' and sys.argv[1] == 'add': raise lackError('Insufficient command!') else: raise commandError('no support command!') except commandError as e: print(e.value) except lackError as e: print(e.value)