Hace un tiempo hice un script para monitorear mi conexión a internet usando ping.
Le hice algunos cambios menores, y ahora muestra datos aunque no haya llenado toda la ventana.
Esta es la última versión
#!/usr/bin/env python3
import subprocess
import sys
import re
SEQ_NUMBER_RE = re.compile(r".*icmp_seq=(\d+) ttl.*")
def report(probes, count):
if len(probes) < count:
count = len(probes)
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
line = stdout.readline().decode()
try:
seq_number = int( SEQ_NUMBER_RE.match(line).group(1))
except Exception:
print( "!!! Failed while parsing line " + line )
seq_number = last_seq_number
probes.extend([0] * (seq_number - last_seq_number - 1))
probes.append(1)
print( "(%s) 10:%s 100:%s 1000:%s 10000:%s" % (
line_count, report(probes, 10), report(probes, 100), report(probes, 1000), report(probes, 10000)
) )
probes = probes[-10000:] # Keep memory usage bounded
last_seq_number = seq_number
def main(argv):
monitor(argv[1])
if __name__ == '__main__':
main(sys.argv)