情報ガジェットにクロスプラットフォームのアクセス第五版(増加ファクトリーモード)

。コーディング8 = UTF-#

インポートスレッディング
インポートparamiko
インポートOS
インポート時
のインポートxlrdする
インポートxlwt
インポートopenpyxl
ログインポート


all_rowを= []
スレッド= []

クラスロガー:
DEF __init __(自己、loggerName):
はロガーを作成し
、ロギングself.logger = .getLogger(loggerName)
self.logger.setLevel(logging.DEBUG)

CWD = os.getcwd()
印刷( "CWD:"、CWD)
ログファイルの書き込みのため、ハンドラを作成する
(=開き、log_pathをos.path.dirnameをos.getcwd())+「\秀でる #ログ」 、それ以外の場合は、出力パスをエラーにつながる、/追加してください、フォルダ、ノートログを出力ファイルのパスを指定し、ログは、ファイル名の一部になる
プリント(「開き、log_path :」、開き、log_path)
LOGNAME =開き、log_path + '\ out.log' #ログファイル名指定された出力
を印刷( "LOGNAME:{0}"形式(LOGNAME))
FH = logging.FileHandler(LOGNAME、エンコーディング= 'UTF-8')を指定# UTF-8形式のエンコード、出力ログテキストの歪みを回避する
fh.setLevel(logging.DEBUG)

ハンドラ、コンソールにログを出力するための作成
CH = logging.StreamHandler()
ch.setLevel(logging.DEBUG)

を定義位出力フォーマットハンドラ
フォーマッタlogging.Formatter =( '%(いるasctime)S - %(名)S - %(levelname)S - %(メッセージ)S')
fh.setFormatter(フォーマッタ)
ch.setFormatter(フォーマッタ)

#1ギブロガーは、ハンドラを追加
self.logger.addHandler(FH)
self.logger.addHandler(CH)


DEF GET_LOG(セルフ):
"" ""「」の関数コールバックロガーを定義します
self.loggerリターン


クラスread_excel(オブジェクト):
DEF __init __(自己、NUM):
threading.Thread .__のinit __(自己)の#
#= self.threadIDスレッドID
self.num NUM =
DEF read_excel(セルフ):
filePathにははos.pathを=。 (os.getcwd()、D 'に参加 :\ 浙江省の銀行がIP.xlsxを\')

WB = openpyxl.load_workbook(filePathに)#エクセルファイルオープン
WS WB = [ 'Sheet1の']
= RES = ws.cell(行1。 、列= 1).VALUE#得るセルの内容の
#印刷(RES)
印刷(wb.sheetnames)#表示すべてのシートには、ファイル名の優れ
た印刷(ws.min_row、ws.max_row、ws.max_column、 ws.min_columnを最大行、max_column:最大列max_row;)細胞株#、カラムを数えます
印刷( '*********************************************** ******** ')
#all_row = []
ws.rowsにおける行の#按行获取单元格(細胞对象) -生成器
ev_row = []
行のセルのために:
値= cell.valueの
値.strip()
プリント( "value.strip():{0}"形式(value.strip()))
ev_row.append(value.strip())
all_row.append(ev_row)
#print( "ev_row:" 、ev_row)
#print( '******************************************* ************ ')
#print(all_row)
#print(LEN(all_row))
#print( "[0] [0] all_row:"、all_row [0] [0])

acquisition_of_informationクラス(threading.Threadのread_excel、):

:__init __(自己、NUM、スレッドID、名前)DEF
self.logger =ロガー(__ name__)
#super().__のinit __(自己、NUM)
threading.Thread .__のinit __(自己)の
自己=スレッドID .threadID
self.num NUM =
プリント( "スレッドID:名前{0}:{} 1"フォーマット(スレッドID、名前))
DEF RUN(自己):
インスタンスオブジェクトを作成SSHClient
SSH = paramiko.SSHClient()
アクセスできるように、方法はありません、リモートマシンの公開鍵を特定する呼び出し
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
LEN1 = LEN(all_row)
印刷(、LEN1「LEN1」)
リモートマシンのアドレス、ポート、ユーザー名とパスワードに接続する#を
にnumの範囲(0、LEN1)。
オープン= FO([NUM] [0] + ".logに"、 "WB +" all_row)
fo.truncate()#をクリアファイルの内容を
all_row [NUM] [0] .strip ()#は、 目次の頭部と尾部を除去する優れ空間
印刷( "all_row {0} [0]:{} 1"フォーマット(NUM、all_row [NUM] [0] .strip()))
[1] all_row [NUM] .strip()#削除は、スプレッドシートのコンテンツをエクセル空間の先頭と末尾
プリント( "all_row {0} [1]:{} 1"フォーマット(NUM、all_row [NUM] .strip())[1])
all_row [NUM] [2] .strip()#ヘッダーとテイルの内容物を除去するスプレッドシートスペース優れ
プリント( "all_row {0} [2] {} 1。"フォーマット(NUMは、[NUM] [2] .strip())all_row)
試み:
ssh.connectを(all_row [ NUM] [0] .strip()、22は、[NUM] [1] .strip()、[NUM] [2] .strip())all_row all_row。
除く例外IOError:
#Print(「サーバへの接続が失敗し、IP:{0}」形式(all_row [NUM] [0]))
uname -a | -i 'のLinux' をgrepします| ) "-lトイレ












RES = stdout.read()
印刷( "RES:"、RES)
であれば解像度== B'1 \ n 'は:
STR = "DF -Ph \ n"は
STR = str.encode()
fo.write(STR)
STDIN 、STDOUT、標準エラー= ssh.exec_command( "DF -Ph")
fo.write(stdout.read())
STR =「********************** *****」\
"*************************** \ n"は
STR = str.encode()
fo.write(STR )
それ以外:
STR = "DF -pg \ n"は
STR = str.encode()
fo.write(STR)
標準入力、標準出力、標準エラー出力= ssh.exec_command( "DF -pg")
fo.write(stdout.read())
STR = "***************************" \
「******* ******************** \ n」は
STR = str.encode()
fo.write(STR)
STR = "猫の.profileする\ n"
STR = str.encode ()
fo.write(STR)
STDIN、STDOUT、標準エラー= ssh.exec_command( "CD /ルート&&猫の.profile")
RES、ERR = stdout.read()、stderr.read()
fo.write(RES)
STR = "***************************" \
「****************** ********* \ n」
STR = str.encode()
FO。書き込み(STR)
STR = "ARP -a \ n"は
STR = str.encode()
fo.write(STR)
STDIN、STDOUT、標準エラー= ssh.exec_command( "ARP -a")
RES、ERR = stdout.read()、stderr.read()
fo.write(RES)
STR = "***************************" \
「***************** ********** \ n」
STR = str.encode()
fo.write(STR)

STR = "は、netstat -rn \ n"
STR = str.encode()
fo.write(STR)
STDIN、 STDOUT、標準エラー= ssh.exec_command( "は、netstat -rn")
RES、ERR = stdout.read()、stderr.read()
fo.write(RES)
STR = "***************************」\
"*************************** \ n"
STR = str.encode()
fo.write(STR)

STR =「猫の/ etc /rc.local\n」
STR = str.encode()
fo.write(STR)
STDIN、STDOUT、標準エラー= ssh.exec_command( "CAT /etc/rc.localの")
RES、ERR = stdout.read()、 stderr.read()
fo.write(RES)
STR = "***************************" \
「****** ********************* \ n」
STR = str.encode()
fo.write(STR)

STR = "猫の/ etc / hosts \ n"
STR = str.encode()
fo.write(STR)
STDIN、STDOUT、標準エラー= ssh.exec_command( "猫の/ etc / hosts")
RES、ERR = stdout.read()、stderr.read()
fo.write(RES)
STR =「******** ******************* "\
" *************************** \ N」
STR = str.encode()
fo.write(STR)

STR = "netstatの-an | grepのLISTEN * \ n"は
STR = str.encode()
fo.write(STR)
標準入力、標準出力、標準エラー出力= ssh.exec_command ( "netstatの-an | grepの* LISTEN")
解像度、ERR = stdout.read()、stderr.read()
fo.write(RES)
STR =「*************** ************ "\
"*************************** \ n」は
ps -ef | グレップのZABBIX」)

















RES、ERR = stdout.read()、stderr.read()
fo.write(RES)
STR =「************************** * "\
"*************************** \ n"は
STR = str.encode()
fo.write(STR)

STR =" PS -ef | grepをするCTMする\ n」
STR = str.encode()
fo.write(STR)
標準入力、標準出力、標準エラー出力= ssh.exec_command( "PS -ef | grepをするCTM")
解像度、ERR = stdout.read() 、stderr.read()
fo.write(RES)
STR = "***************************" \
「***** ********************** \ n」
STR = str.encode()
FO。書き込み(STR)
STR = "のcrontab -l \ n"
STR = str.encode()
fo.write(STR)
STDIN、STDOUT、標準エラー= ssh.exec_command( "のcrontab -l")
RES、ERR = stdout.read()、標準エラー。読んで()
fo.write(RES)
STR = "--------------------------" \
「********* ******************」\
"***************************" \
"--------------------------- \ n"
STR = str.encode()
fo.write(STR)
ssh.close()
FO .close()
。self.logger.get_log()デバッグ( "服务器信息获取完成、IP:{0}"。フォーマット([0] [かどう] all_row))
NUM = NUM + 1

デフ__del ___(自己、NUM):
self.num = num個の


クラスprint_all_row(read_excel、threading.Thread):
デフ__init __(自己、NUM、スレッドID、名前):
threading.Thread .__のinit __(自己)
self.threadID =スレッドID
セルフ。 NUM = NUMの
印刷( "print_all_row名:"、名前)

DEF実行(自己):
印刷( "[0] [0] all_row"、[0] [0] all_row)
all_row」(プリント[0] [1] :」、all_row [0] [1])
印刷( "all_row [0] [2]:"、all_row [0] [2])

クラスPerson:
DEF __init __(自己):
self.name =なし
self.gender =なし

のgetName(自己)DEF:
リターンself.name

getGender(自己)DEF:
self.gender返す

クラスファクトリを:
:getPerson(自己、名前、性別)デフ
かの性別== 'M':
リターンacquisition_of_information(0、 "スレッド2"、 "zhouhaiwu")
であれば性別== 'F':
リターンprint_all_row (0、 "スレッド-4"、 "zhouhaiwu")

DEFメイン():
工場出荷時=()
スレッド1 = factory.getPerson( "zhouhaiwu"、 "M")
T =ロガー( "小ツール"))(GET_LOG。 .DEBUGは、(% 'zhouhaiwu' "ユーザ%sはlogingある")
(= time.time開始)
優れ= read_excel(0)
excel.read_excel()
スレッド1 = acquisition_of_information(0、 "スレッド2"、 "zhouhaiwu")
#スレッド2 = acquisition_of_information(1、 "スレッド-3"、 "zhouhaiwu")
= print_all_row thread3(0、 "スレッド-4"、 "zhouhaiwu")
新しいスレッド開く
#のthread1.startを()
thread1.start()
#thread2.start()
thread3.start()
は、リストのスレッドにスレッドを追加
#threadsを.append(スレッド1)
threads.append(スレッド1)
#1 threads.append(スレッド2)
threads.append(thread3)
すべてのスレッドが終了するのを#待ち
のスレッドでtについて:
t.join()
印刷( "メインスレッドを終了する")
終了時間= .time()
印刷(STR(終了))

__name__ == '__main__' IF:
メイン()

おすすめ

転載: www.cnblogs.com/niaocaizhou/p/11110821.html