2011-08-31 2 views
-3

私はログに書き込みpingが生きているか、生きていないスクリプトスクリプトです。いつもpingが生きているのですか?

しかし、すべての時間は、そのping aliveを書き込みます。

なぜですか?

コード:

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です。 –

+0

pingalingとは何ですか?そしてなぜ+1? – Zygimantas

+0

私はピンインリングが何であるか分かりませんでした。コードを書きました。私はちょうどそれの音が好きで、私の子供の自転車の鐘の何かを思い出させる。 ;) –

答えて

0

pingが失敗した場合、あなたの失敗testitオブジェクトが-1statusを持っているので、これは"Alive"あるreportの最後の項目に対応します。

ステータスをNoneに設定するか、reportをインデックスする前にstatus-1かどうかを確認してください。

+0

しかし、どうしてそんなことが普通に起こるでしょうか? – Zygimantas

+0

私はhttp://www.wellho.net/solutions/python-python-threads-a-first-example.htmlのコピーコードです – Zygimantas

+0

いいえ、あなたはしませんでした。そのコードは '-q -c2'(2つのpingのみ、要約行の表示のみ)を' ping'に渡しますが、あなたは '-n 1'を渡します(ホスト名の検索をスキップし、数字のアドレスを使用し、 ')。 'ping'に完全に異なる出力を生成するように指示しているので、それをその例とは違って解析する必要があります。 –

関連する問題