Форум сайта python.su
0
Дорого времени суток уважаемые форумчане.
Подскажите как сделать что бы вывод команды ping не стирал предыдущие записи а добавлял.
Требуется пинговать устройства в сети с записью результатов в файл, для последующей выборки и определение то какое будет недоступно и качество прохождение пинга. Вот начало набросал, а как сделать что бы данные не перезаписывали незнаю. Может подскажите как другим путем это можно реализовать?
inde = ('192.168.1.1','192.168.1.2','192.168.1.3') for y in inde: cmd = 'ping ' +y import subprocess PIPE = subprocess.PIPE p = subprocess.Popen(cmd, shell = True, stdout=open('ping.log','a'), cwd = 'c:/python/') p.wait() print cmd
Офлайн
0
Проблему с записью решил, может кому пригодится.
#!/usr/bin/env python # -*- coding: utf-8 -*- import codecs, sys import subprocess inde = ('192.168.1.1','192.168.1.2','192.168.1.3') f = open('C:\\python\workfile.txt', 'a') for y in inde: cmd = 'ping ' +y p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE) out = p.stdout.read() #в переменной out находится вывод команды ping. f.write(out) f.closed
Отредактировано denveren0k (Сен. 8, 2012 13:02:42)
Офлайн
20
С помощью многопоточности. Устройства нужно опрашивать параллельно.
Офлайн
0
Вот пример вывода данных в файл.
Обмен пакетами с 192.168.1.1 по с 32 байтами данных:
Ответ от 192.168.1.1: число байт=32 время=6мс TTL=64
Ответ от 192.168.1.1: число байт=32 время=1мс TTL=64
Ответ от 192.168.1.1: число байт=32 время<1мс TTL=64
Ответ от 192.168.1.1: число байт=32 время=2мс TTL=64
Статистика Ping для 192.168.1.1:
Пакетов: отправлено = 4, получено = 4, потеряно = 0
(0% потерь)
Приблизительное время приема-передачи в мс:
Минимальное = 0мсек, Максимальное = 6 мсек, Среднее = 2 мсек
Обмен пакетами с 192.168.1.2 по с 32 байтами данных:
Ответ от 192.168.1.2: Заданный узел недоступен.
Ответ от 192.168.1.2: Заданный узел недоступен.
Ответ от 192.168.1.2: Заданный узел недоступен.
Ответ от 192.168.1.2: Заданный узел недоступен.
Статистика Ping для 192.168.1.2:
Пакетов: отправлено = 4, получено = 4, потеряно = 0
(0% потерь)
Обмен пакетами с 192.168.1.190 по с 32 байтами данных:
Ответ от 192.168.1.190: Заданный узел недоступен.
Ответ от 192.168.1.190: Заданный узел недоступен.
Ответ от 192.168.1.190: Заданный узел недоступен.
Ответ от 192.168.1.190: Заданный узел недоступен.
Статистика Ping для 192.168.1.190:
Пакетов: отправлено = 4, получено = 4, потеряно = 0
(0% потерь)
как сделать отображение рабочиx ip-адресов и выборкой их приема-передачи в мс?
например для 192.168.1.1
Статистика Ping для 192.168.1.2 (2 мсек)
гуглил этот вопрос ничего адекватного с поиском и выборкой из файла не нашел.
Помогите пожалуйста, может у кого были наработки?
Офлайн
857
denveren0kвообще, нужно разделить записи и анализировать каждую (чтобы случайно что-нибудь не то не попало не туда)
как сделать отображение рабочиx ip-адресов и выборкой их приема-передачи в мс?
Офлайн
0
Спасибо за совет, способ я в принципе нашел вот.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
open_file = open('C:\\python\workfile.txt', ‘r’)
line = open_file.readline()
for line in open_file:
#print line.find('192.168.1.111')
print line.startswith('Ответ')
#тут будет обработка
open_file.close()
пол дня вчера просидел так и не смог разобраться с кодировкой.Офлайн
173
denveren0kЕсть ping написанный на Питоне.
Насчет альтернативы ping-у вопрос остается открытым, поделитесь идеями.
denveren0kcp866
в текстовый файл сохраняет его в ASCII
Офлайн
0
Спасибо за ссылку почитаю, а вот насчет кодировки не понятно, как сделать сохранение результатов пинга в utf-8?
Офлайн
32
Это можно без питона сделать, я на линухе делал по простому, вешал в крон “запуск каждые 5 мин”:
echo $(date +%Y-%m-%d_%H:%M) $(ping google.com -c 300 | grep -c 'time=') >> stat.csv
Офлайн
0
o7412369815963 Спасибо, но вот нужно именно в питоне, потому что будет дальнейшая обработка.
Пытаюсь обработать файл построчно с преобразованием line.encode('utf-8') но выдает ошибку
exceptions.UnicodeDecodeError: ‘ascii’ codec can't decode byte 0x8e in position 0: ordinal not in range(128) не хочет преобразовывать ни в какую кодировку.
Офлайн