Je voudrais afficher périodiquement mon résultat de vitesse de téléchargement de test de vitesse dans indicateur-sysmoniteur .
speedtest-cli a une sortie quelque peu réduite 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 davantage la sortie, jusqu'au chiffre numérique de la vitesse de téléchargement?
Comme speedtest-cli
est 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-le 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)
exécuter avec python dl-speedtest.py
Cela donne le résultat en bps, en 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 que vous devrez peut-être utiliser pip install speedtest-cli --upgrade
pour effectuer la mise à niveau.
C'est un travail pour awk
name__:
speedtest-cli --simple | awk 'NR==2{print$2}' # just the numeral
speedtest-cli --simple | awk 'NR==2{print$2" "$3}' # numeral and unit
NR==2
- prenez la ligne 2
{print$2}
- affiche la deuxième colonne (séparée par des espaces){print$2" "$3}
- affiche la deuxième colonne suivie d'un espace et de la troisièmeAvec sed
c'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
/D/!d
- recherche les lignes contenant D
et ne pas (!
) d
name__elete les supprimer, mais toutes les autres ligness/A/B/
- s
name__ubstitute A
avec B
name__.*
- prend tout[^ ]*
- prend tout ce qui n'est pas (^
) un espace␣
(space space) - un espace littéral\(…\)
- prend tout à l'intérieur et enregistre le en tant que groupe\1
- récupère le contenu du groupe 1Et puis il y a:
speedtest-cli --simple | grep Download | awk '{print $2}'
Comme la première option de dessert sans le sélecteur de ligne.
Vous pouvez essayer ceci:
speedtest-cli --simple | grep "Download: " | sed "s/Download: //g"
Cela fonctionnera également:
speedtest-cli --simple | grep -E "Download:\s*" | sed -r 's/Download:\s*//'