Como aparar o resultado do speedtest-cli para apenas mostrar a velocidade de download?

8

Gostaria de exibir periodicamente o meu resultado de velocidade de download mais rápido em indicador- sysmonitor .

speedtest-cli tem uma saída um pouco aparada se você executar

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

Existe alguma maneira de reduzir ainda mais a saída, apenas para o numeral de velocidade de download?

    
por Adam 04.10.2017 / 07:34

5 respostas

11

Como o speedtest-cli é um programa e uma biblioteca em Python, é bastante fácil criar um programa alternativo mínimo que realize apenas um teste de download e imprima a saída.

Abra um editor, salve como 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)

executado com python dl-speedtest.py

Isso fornece o resultado em bps, como um número de ponto flutuante Mbps arredondado para um decimal conforme solicitado

A versão mínima do speedtest-cli para que isso funcione é 1.0.0 eu acho, você pode precisar usar pip install speedtest-cli --upgrade para atualizar.

    
por Pelle 04.10.2017 / 10:52
10

Isso é um trabalho para awk :

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

Explicações

  • NR==2 - pegue a linha 2
  • {print} - imprime a segunda coluna (separada por espaço por padrão)
  • {print" "} - imprime a segunda coluna seguida de um espaço e a terceira

Com sed é um pouco mais complicado:

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

Explicações

  • /D/!d - procura por linhas contendo D e não ( ! ) d eletá-las, mas todas as outras linhas
  • s/A/B/ - s ubstitute A com B
  • .* - leve tudo
  • [^ ]* - pega tudo que não é ( ^ ) um espaço
  • (caractere de espaço) - um espaço literal
  • \(…\) - leve tudo para dentro e salve como um grupo
  • - obtém o conteúdo do grupo 1
por dessert 04.10.2017 / 08:13
2

E depois há:

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

Como a primeira opção da sobremesa, sem o seletor de linha.

    
por Stephen Boston 04.10.2017 / 13:08
1

Isso também funcionará:

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

Você pode tentar isso:

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