Come tagliare il risultato di speedtest-cli per produrre solo la velocità di download?


8

Vorrei visualizzare periodicamente il risultato della mia velocità di download più veloce in indicatore-sysmonitor .

speedtest-cli ha un output in qualche modo ridotto se si esegue

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

C'è un modo per tagliare ulteriormente l'output, fino al solo numero di velocità di download?


Puoi usare l' --no-uploadopzione anche per non visualizzare il caricamento.
αғsнιη,

Risposte:


11

Come speedtest-cliè un programma e una libreria Python, è abbastanza facile creare un programma alternativo minimo che esegue solo un test di download e stampa l'output.

Apri un editor, salva come 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)

Corri con python dl-speedtest.py

Questo dà il risultato in bps, come un numero in virgola mobile Mbps arrotondato a un decimale come richiesto

La versione minima di speedtest-cli per farlo funzionare è 1.0.0 Penso che potrebbe essere necessario utilizzare pip install speedtest-cli --upgradeper l'aggiornamento.


Bellezza grazie! Per quanto la risposta di @ dessert sia, questo è quello che ho finito per usare a causa dell'efficienza. Lo sto sondando ogni pochi minuti, quindi tagliare il grasso su chiamate non necessarie è vantaggioso per me.
Adam,

@Adam Allora dovresti modificare la tua domanda e cambiarla di conseguenza - il titolo non corrisponde attualmente a questa risposta.
dessert

12

Questo è un lavoro per awk:

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

spiegazioni

  • NR==2 - prendere la linea 2
  • {print$2} - stampa la seconda colonna (spazio separato per impostazione predefinita)
  • {print$2" "$3} - stampa la seconda colonna seguita da uno spazio e la terza

Con sedè un po 'più complicato:

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

spiegazioni

  • /D/!d- cerca le righe che le contengono De non le elimina ( !) d, ma ogni altra riga
  • s/A/B/- ssostituire AconB
  • .* - prendi tutto
  • [^ ]*- Prendi tutto ciò che non è ( ^) uno spazio
  • (carattere spaziale) - uno spazio letterale
  • \(…\) - porta tutto dentro e salvalo come gruppo
  • \1 - ottenere il contenuto del gruppo 1

1

Questo funzionerà anche:

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

1

Puoi provare questo:

speedtest-cli --simple | grep "Download: " | sed "s/Download: //g"

2
Invece di grepcombinarli con sed, puoi semplicemente usare sed -ne aggiungere palla fine dell'espressione, come speedtest-cli --simple | sed -nr 's/Download:\s*//p'.
Ruslan,

1

E poi c'è:

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

Come la prima opzione del dessert senza il selettore di linea.


1
È raramente utile fare grep ... | awk-speedtest-cli --simple | awk '/Download/{print $2}'
muru,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.