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?

Adam
la source
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.

Pelle
la source
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
dessert
la source
1

Cela fonctionnera également:

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

Vous pouvez essayer ceci:

speedtest-cli --simple | grep "Download: " | sed "s/Download: //g"
AmeyaVS
la source
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.

Stephen Boston
la source
1
Il est rarement utile de le faire grep ... | awk-speedtest-cli --simple | awk '/Download/{print $2}'
muru