Wie kann man das Ergebnis von speedtest-cli so trimmen, dass nur die Download-Geschwindigkeit ausgegeben wird?

8

Ich möchte regelmäßig mein Speedtest-Download-Speed-Ergebnis in Indicator-Sysmonitor anzeigen .

speedtest-cli hat eine etwas reduzierte 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, die Ausgabe noch weiter auf die Download-Geschwindigkeit zu reduzieren?

Adam
quelle
Sie können die --no-uploadOption verwenden, um den Upload auch nicht anzuzeigen.
αғsнιη

Antworten:

11

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

Öffnen Sie einen Editor und speichern Sie unter 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)

laufen mit python dl-speedtest.py

Dies ergibt das Ergebnis in bps als Gleitkommazahl Mbps, die wie gewünscht 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 ein pip install speedtest-cli --upgradeUpgrade durchführen.

Pelle
quelle
Schönheit, danke! So großartig die Antwort von @ dessert auch ist, diese habe ich letztendlich aus Effizienzgründen verwendet. Ich frage es alle paar Minuten ab, daher ist es für mich von Vorteil, das Fett bei unnötigen Anrufen zu reduzieren.
Adam
@Adam Sie sollten Ihre Frage bearbeiten und dann entsprechend ändern - der Titel stimmt derzeit nicht mit dieser Antwort überein.
Nachtisch
12

Das ist ein Job für awk:

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

Erklärungen

  • NR==2 - Linie nehmen 2
  • {print$2} - Drucken Sie die zweite Spalte (standardmäßig durch Leerzeichen getrennt).
  • {print$2" "$3} - Drucken Sie die zweite Spalte, gefolgt von einem Leerzeichen und der dritten

Mit ist sedes etwas komplizierter:

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

Erklärungen

  • /D/!d- Suche nach Zeilen, die sie enthalten Dund nicht ( !) dlöschen, sondern nach jeder anderen Zeile
  • s/A/B/- sErsatz AmitB
  • .* - Nimm alles
  • [^ ]*- nimm alles, was kein ^Leerzeichen ist
  • (Leerzeichen) - ein wörtliches Leerzeichen
  • \(…\) - Nimm alles mit und speichere es als Gruppe
  • \1 - Holen Sie sich den Inhalt von Gruppe 1
Dessert
quelle
1

Dies wird auch funktionieren:

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

Sie können dies versuchen:

speedtest-cli --simple | grep "Download: " | sed "s/Download: //g"
AmeyaVS
quelle
2
Anstatt mit zu grepkombinieren sed, können Sie einfach am Ende des Ausdrucks verwenden sed -nund anhängen p, wie z speedtest-cli --simple | sed -nr 's/Download:\s*//p'.
Ruslan
1

Und dann gibt es:

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

Wie die erste Option des Desserts, jedoch ohne den Zeilenwähler.

Stephen Boston
quelle
1
Es ist selten nützlich zu tun grep ... | awk-speedtest-cli --simple | awk '/Download/{print $2}'
muru