pingmon en python3
Hace un tiempo hice un scriptcito en python para monitorear la conexión de red usando ping. Hoy quise usarlo de nuevo y descubrí que no anda en python3, así que lo adapté. Solo necesitaba 2 pequeños cambios:
- print es python3 es una función, así que tuve que agregar unos paréntesis.
- sys.stdout.readline() en python 3 devuelve un montón de bytes (en vez de un string) así que agregué .encode() para transformarlo en string
Dejo acá abajo la versión nueva:
#!/usr/bin/env python3
import subprocess
import sys
import re
SEQ_NUMBER_RE = re.compile(".*icmp_seq=(\d+) ttl.*")
def report(probes, count):
if len(probes) < count:
return "N/A"
return str ( count - sum(probes[-count:]) )
def monitor(ip):
probes = []
ping = subprocess.Popen(["ping", ip], stdout=subprocess.PIPE)
stdout = ping.stdout
stdout.readline() # Ignore first line
line_count = 0
last_seq_number = 0
while True:
line_count +=1
seq_number = int( SEQ_NUMBER_RE.match(stdout.readline().decode()).group(1))
probes.extend([0] * (seq_number - last_seq_number - 1))
probes.append(1)
print( "(%s) 10:%s 100:%s 1000:%s" % (
line_count, report(probes, 10), report(probes, 100), report(probes, 1000)
) )
probes = probes[-1000:] # Keep memory usage bounded
last_seq_number = seq_number
def main(argv):
monitor(argv[1])
if __name__ == '__main__':
main(sys.argv)
Happy hacking,
Aureliano
No hay comentarios.:
Publicar un comentario