Решила написать программу, постоянно пингующую несколько IP и ведущую лог, когда провалы в сети. Вообщем вот что получилось.
#!/usr/bin/env python #-*- coding:utf-8 -*- import datetime import sys, codecs import time import subprocess from threading import Thread from Queue import Queue num_threads = 3 q = Queue() address = ['172.18.0.4','172.18.0.244','172.18.0.51'] def ping (i,q): while True: ip=q.get() cmd = '/usr/bin/oping ' + ip p=subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE) while cmd: out=p.stdout.readline() d = datetime.datetime.now() timedata = d.strftime("%Y-%m-%d %H:%M:%S") f = open('/home/kuzmina/ping.log', 'a') if 'timeout' in out: print timedata +' '+ ip + ' - Неактивен' f.write (timedata +' '+ ip + ' - Неактивен \r') else: continue f.closed q.task_done() for i in range(num_threads): worker = Thread(target=ping, args=(i, q)) worker.setName('proc') worker.setDaemon(True) worker.start() for ip in address: q.put(ip) q.join()
Иногда запускаешь - отрабатывает нормально, а иногда получается, что потоки совпадают и выводится, что не отвечает на пинг не 3 устройства, а два или одно.
Подскажите в чем ошибка и как исправить.
А еще хотелось бы критики по всей программе, т. к. я еще не волшебник, а только учусь)))))
Заранее спасибо)))