Comment découper le résultat de speedtest-cli pour ne sortir que la vitesse de téléchargement?


8

Je voudrais afficher périodiquement mon résultat de vitesse de téléchargement speedtest dans indicateur-sysmonitor .

speedtest-cli a une sortie quelque peu coupée si vous exécutez

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

Existe-t-il un moyen de réduire encore plus la sortie, jusqu'à la vitesse de téléchargement?


Vous pouvez également utiliser l' --no-uploadoption pour ne pas afficher le téléchargement.
αғsнιη

Réponses:


11

Tout speedtest-clicomme un programme et une bibliothèque python, il est assez facile de créer un programme alternatif minimal qui effectue uniquement un test de téléchargement et imprime la sortie.

Ouvrez un éditeur, enregistrez sous 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)

courir avec python dl-speedtest.py

Cela donne le résultat en bps, comme un nombre à virgule flottante Mbps arrondi à une décimale comme demandé

La version minimale de speedtest-cli pour que cela fonctionne est 1.0.0 je pense, vous devrez peut-être utiliser pip install speedtest-cli --upgradepour mettre à niveau.


Beauté, merci! Aussi bien que la réponse de @ dessert soit, c'est ce que j'ai fini par utiliser en raison de son efficacité. Je l'interroge toutes les quelques minutes, donc couper la graisse lors d'appels inutiles me profite.
Adam

@Adam Vous devez modifier votre question et la modifier en conséquence - le titre ne correspond pas à cette réponse pour le moment.
dessert

12

C'est un travail pour awk:

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

Explications

  • NR==2 - prendre la ligne 2
  • {print$2} - imprimer la deuxième colonne (séparée par des espaces par défaut)
  • {print$2" "$3} - imprimer la deuxième colonne suivie d'un espace et de la troisième

Avec sedc'est un peu plus compliqué:

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

Explications

  • /D/!d- rechercher des lignes contenant Det ne pas ( !) dles élete, mais toutes les autres lignes
  • s/A/B/- sremplacer AparB
  • .* - Prenez tout
  • [^ ]*- prenez tout ce qui n'est pas ( ^) un espace
  • (caractère d'espace) - un espace littéral
  • \(…\) - prenez tout à l'intérieur et enregistrez-le en groupe
  • \1 - obtenir le contenu du groupe 1

1

Cela fonctionnera également:

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

1

Vous pouvez essayer ceci:

speedtest-cli --simple | grep "Download: " | sed "s/Download: //g"

2
Au lieu de grepcombiner avec sed, vous pouvez simplement utiliser sed -net ajouter pà la fin de l'expression, comme speedtest-cli --simple | sed -nr 's/Download:\s*//p'.
Ruslan

1

Et puis il y a:

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

Comme la première option du dessert sans le sélecteur de ligne.


1
Il est rarement utile de le faire grep ... | awk-speedtest-cli --simple | awk '/Download/{print $2}'
muru
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.