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

8

Mi piacerebbe visualizzare periodicamente il risultato della velocità di download più veloce in indicatore- SysMonitor .

speedtest-cli ha un output un po 'tagliato se si esegue

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

Esiste un modo per ridurre ulteriormente l'output, fino al solo numero di velocità di download?

    
posta Adam 04.10.2017 - 07:34

5 risposte

11

Poiché 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)

esegui 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 far funzionare questo è 1.0.0, penso che potresti dover usare pip install speedtest-cli --upgrade per l'aggiornamento.

    
risposta data Pelle 04.10.2017 - 10:52
10

Questo è un lavoro per awk :

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

Spiegazioni

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

Con sed è un po 'più complicato:

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

Spiegazioni

  • /D/!d - cerca le righe contenenti D e non ( ! ) d elete loro, ma ogni altra riga
  • s/A/B/ - s ubostato A con B
  • .* : prendi tutto
  • [^ ]* : prendi tutto ciò che non è ( ^ ) uno spazio
  • (carattere spazio) - uno spazio letterale
  • \(…\) : prendi tutto dentro e salvalo come un gruppo
  • : ottieni il contenuto del gruppo 1
risposta data dessert 04.10.2017 - 08:13
2

E poi c'è:

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

Come prima opzione del dessert anche se senza il selettore di linea.

    
risposta data Stephen Boston 04.10.2017 - 13:08
1

Funzionerà anche:

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

Puoi provare questo:

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

Leggi altre domande sui tag