2011-08-31 65 views
-3

我的脚本脚本在日志中写入ping活着或不活动。为什么平时都活着?

但是,所有时间记录写入活着的ping。

为什么?

代码:

import os 
import re 
import time 
import sys 
from threading import Thread 
from time import gmtime, strftime 

class IntTools: 
    def PingTool(self): 
     ipconf = open('ip.conf', 'r') 
     ipstrip = ipconf.readlines() 
     ip = ipstrip[2].strip() 
     ip2 = ipstrip[3].strip() 
     ip3 = ipstrip[4].strip() 
     ip4 = ipstrip[5].strip() 
     ip5 = ipstrip[6].strip() 


     class testit(Thread): 
      def __init__ (self,ip): 
       Thread.__init__(self) 
       self.ip = ip 
       self.status = -1 
      def run(self): 
       pingaling = os.popen("ping "+self.ip+" -n 1","r") 
       while 1: 
        line = pingaling.readline() 
        #print line 
        if not line: break 
        igot = re.findall(testit.lifeline,line) 
        if igot: 
         self.status = int(igot[0]) 

     testit.lifeline = re.compile(r"(\d) received") 
     report = ("No response","Partial Response","Alive") 

     print time.ctime() 
     pinglist = [] 
     current = testit(ip) 
     pinglist.append(current) 
     current.start() 
     for pingle in pinglist: 
      pingle.join() 
      pinglog = open('ping.log', 'a') 
      pinglog.write('Status from '+pingle.ip+" is "+report[pingle.status]+'\n') 
      pinglog.close()  
    def ReadPingLog(self): 
     pinglog = open('ping.log', 'r+') 
     print pinglog.read() 
     pinglog.close() 
IntTools = IntTools() 
IntTools.PingTool() 
+3

+1为pingaling。 –

+0

什么是pingaling?为什么+1? – Zygimantas

+0

我不知道pingping是什么,你写的代码。我只是喜欢它的声音,并且让我想起了我童年的自行车钟。 ;) –

回答

0

因为你的失败testit对象有-1一个status如果不能ping通,这相当于report最后一个项目,这是"Alive"

尝试设置状态None,或者检查是否status-1索引report之前。

+0

但是,它通常会如何呢? – Zygimantas

+0

我是http://www.wellho.net/solutions/python-python-threads-a-first-example.html的复制代码 – Zygimantas

+0

不,你没有。该代码将'-q -c2'(仅限两个ping,仅显示摘要行)传递给'ping',但是您传递了'-n 1'(跳过主机名查找并仅使用数字地址,后面跟着大概不正确的参数'1 ')。既然你告诉'ping'产生完全不同的输出,你需要从这个例子中解析它。 –

相关问题