Jak przyciąć wynik speedtest-cli, aby wyświetlać tylko prędkość pobierania?

8

Chciałbym okresowo wyświetlać mój wynik testu prędkości w teście wskaźnik-sysmonitor .

Jeśli biegniesz, speedtest-cli ma nieco przycięte wyjście

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

Czy jest jakiś sposób, aby jeszcze bardziej przyciąć dane wyjściowe, aż do samej prędkości pobierania?

Adam
źródło
Możesz także użyć --no-uploadopcji, aby nie wyświetlać przesyłania.
αғsнιη

Odpowiedzi:

11

Podobnie speedtest-clijak program i biblioteka pythonowa, dość łatwo jest stworzyć minimalny program alternatywny, który wykonuje tylko test pobierania i drukuje dane wyjściowe.

Otwórz edytor, zapisz jako 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)

Biegnij z python dl-speedtest.py

Daje to wynik w bps, jako liczbę zmiennoprzecinkową Mbps zaokrągloną do jednego miejsca po przecinku zgodnie z żądaniem

Minimalna wersja speedtest-cli, aby to działało, to 1.0.0. Myślę, że może zaistnieć potrzeba pip install speedtest-cli --upgradeaktualizacji.

Pelle
źródło
Piękno, dzięki! Mimo, że odpowiedź @ deser jest taka, że ​​skończyło się na tym ze względu na wydajność. Odpytuję go co kilka minut, więc zbieranie tłuszczu na niepotrzebnych połączeniach jest dla mnie korzystne.
Adam
@Adam Powinieneś edytować swoje pytanie i odpowiednio je odpowiednio zmienić - tytuł nie odpowiada obecnie tej odpowiedzi.
deser
12

To praca dla awk:

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

Objaśnienia

  • NR==2 - weź linię 2
  • {print$2} - wydrukuj drugą kolumnę (domyślnie rozdzielone spacjami)
  • {print$2" "$3} - wydrukuj drugą kolumnę, a następnie spację i trzecią

Ze sedjest to trochę bardziej skomplikowane:

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

Objaśnienia

  • /D/!d- szukaj linii zawierających Di nie ( !) dsuĹ je, ale co drugi wiersz
  • s/A/B/- supstitute AwithB
  • .* - weź wszystko
  • [^ ]*- weź wszystko, co nie jest ( ^) spacją
  • (znak spacji) - dosłowna przestrzeń
  • \(…\) - weź wszystko do środka i zapisz jako grupę
  • \1 - zdobądź zawartość grupy 1
deser
źródło
1

Będzie to również działać:

speedtest-cli --simple | grep -E "Download:\s*" | sed -r 's/Download:\s*//'
George Udosen
źródło
1

Możesz spróbować:

speedtest-cli --simple | grep "Download: " | sed "s/Download: //g"
AmeyaVS
źródło
2
Zamiast grepłączyć z sed, możesz po prostu użyć sed -ni dołączyć pna końcu wyrażenia, na przykład speedtest-cli --simple | sed -nr 's/Download:\s*//p'.
Ruslan
1

A potem jest:

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

Podobnie jak pierwsza opcja deseru bez selektora linii.

Stephen Boston
źródło
1
Rzadko się przydaje grep ... | awk-speedtest-cli --simple | awk '/Download/{print $2}'
muru