¿Cómo recortar el resultado de speedtest-cli para generar solo la velocidad de descarga?

8

Me gustaría mostrar periódicamente mi resultado de velocidad de descarga más rápida en el indicador-sysmonitor .

speedtest-cli tiene una salida algo recortada si ejecuta

$ speedtest-cli --simple
Ping: 50.808 ms
Download: 10.87 Mbit/s
Upload: 4.47 Mbit/s 

¿Hay alguna forma de recortar aún más la salida, hasta el número de velocidad de descarga?

Adán
fuente
Puede usar la --no-uploadopción para no mostrar la carga tampoco.
αғsнιη

Respuestas:

11

Como speedtest-clies un programa y una biblioteca de Python, es bastante fácil crear un programa alternativo mínimo que solo realice una prueba de descarga e imprima el resultado.

Abrir un editor, guardar como dl-speedtest.py

import speedtest

s = speedtest.Speedtest()
s.get_config()
s.get_best_server()
speed_bps = s.download()
speed_mbps = round(speed_bps / 1000 / 1000, 1)
print(speed_mbps)

corre con python dl-speedtest.py

Esto da el resultado en bps, como un número de coma flotante Mbps redondeado a un decimal según lo solicitado

La versión mínima de speedtest-cli para que esto funcione es 1.0.0. Creo que es posible que deba usar pip install speedtest-cli --upgradepara actualizar.

Pelle
fuente
Belleza, gracias! Tan genial como la respuesta de @ dessert es, esto es lo que terminé usando debido a la eficiencia. Lo estoy encuestando cada pocos minutos, así que recortar la grasa en llamadas innecesarias es beneficioso para mí.
Adam
@ Adam Debería editar su pregunta y cambiarla en consecuencia, el título no coincide con esta respuesta actualmente.
postre
12

Eso es un trabajo para awk:

speedtest-cli --simple | awk 'NR==2{print$2}'      # just the numeral
speedtest-cli --simple | awk 'NR==2{print$2" "$3}' # numeral and unit

Explicaciones

  • NR==2 - tomar línea 2
  • {print$2} - imprime la segunda columna (separada por espacios por defecto)
  • {print$2" "$3} - imprime la segunda columna seguida de un espacio y la tercera

Con sedesto es un poco más complicado:

speedtest-cli --simple | sed '/D/!d;s/.* \(.*\) .*/\1/' # just the numeral
speedtest-cli --simple | sed '/D/!d;s/[^ ]* \(.*\)/\1/' # numeral and unit

Explicaciones

  • /D/!d- busca líneas que contengan Dy no las elijas ( !) d, pero todas las demás líneas
  • s/A/B/- ssustituir AconB
  • .* - toma todo
  • [^ ]*- toma todo lo que no sea ( ^) un espacio
  • (carácter de espacio): un espacio literal
  • \(…\) - lleva todo dentro y guárdalo como grupo
  • \1 - obtener el contenido del grupo 1
postre
fuente
1

Esto también funcionará:

speedtest-cli --simple | grep -E "Download:\s*" | sed -r 's/Download:\s*//'
George Udosen
fuente
1

Puedes probar esto:

speedtest-cli --simple | grep "Download: " | sed "s/Download: //g"
AmeyaVS
fuente
2
En lugar de grepcombinarse con sed, simplemente puede usar sed -ny agregar pal final de la expresión, como speedtest-cli --simple | sed -nr 's/Download:\s*//p'.
Ruslan
1

Y luego está:

speedtest-cli --simple | grep Download | awk '{print $2}'

Como la primera opción de postre, aunque sin el selector de línea.

Stephen Boston
fuente
1
Raramente es útil hacerlo grep ... | awk-speedtest-cli --simple | awk '/Download/{print $2}'
muru