Wie trimme ich das Ergebnis von speedtest-cli, um nur die Download-Geschwindigkeit auszugeben?

8

Ich möchte mein Speedtest-Download-Ergebnis regelmäßig in indicator- anzeigen. sysmonitor .

speedtest-cli hat eine etwas getrimmte Ausgabe, wenn Sie

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

Gibt es eine Möglichkeit, den Ausgang noch mehr zu reduzieren, bis auf die Downloadgeschwindigkeit?

    
Adam 04.10.2017, 07:34

5 Antworten

11

Da speedtest-cli ein Python-Programm und eine Bibliothek ist, ist es relativ einfach, ein minimales alternatives Programm zu erstellen, das nur einen Download-Test durchführt und die Ausgabe druckt.

Öffnen Sie einen Editor, speichern Sie als 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)

Lauf mit python dl-speedtest.py

Dies ergibt das Ergebnis in bps, wobei eine Fließkommazahl Mbps wie angefordert auf eine Dezimalstelle gerundet wird

Die minimale Version von speedtest-cli, damit dies funktioniert, ist 1.0.0. Ich denke, Sie müssen möglicherweise pip install speedtest-cli --upgrade zum Aktualisieren verwenden.

    
Pelle 04.10.2017, 10:52
10

Das ist ein Job für awk :

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

Erläuterungen

  • NR==2 - nimm die Zeile 2
  • {print} - drucke die zweite Spalte (standardmäßig durch Leerzeichen getrennt)
  • {print" "} - drucke die zweite Spalte gefolgt von einem Leerzeichen und die dritte Spalte

Mit sed ist es etwas komplizierter:

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

Erläuterungen

  • /D/!d - suche nach Zeilen, die D enthalten und nicht ( ! ) d , sondern jede zweite Zeile
  • s/A/B/ - s ubstitute A mit B
  • .* - nimm alles
  • [^ ]* - nimm alles was nicht ist ( ^ ) ein Leerzeichen
  • (Leerzeichen) - ein Literalraum
  • \(…\) - nimm alles rein und speichere es als Gruppe
  • - Erhalte den Inhalt der Gruppe 1
dessert 04.10.2017 08:13
2

Und dann ist da:

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

Wie die erste Option des Nachtischs, jedoch ohne den Zeilenselektor.

    
Stephen Boston 04.10.2017 13:08
1

Dies funktioniert auch:

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

Sie können dies versuchen:

speedtest-cli --simple | grep "Download: " | sed "s/Download: //g"
    
AmeyaVS 04.10.2017 07:43

Tags und Links