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

8

Gostaria de exibir periodicamente meu resultado da velocidade de download do speedtest no indicador-sysmonitor .

O speedtest-cli possui 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 cortar ainda mais a saída, até o número da velocidade de download?

Adão
fonte
Você pode usar a --no-uploadopção para não exibir o upload também.
αғsнιη

Respostas:

11

Como speedtest-clié um programa e uma biblioteca python, é bastante fácil criar um programa alternativo mínimo que apenas realiza um teste de download e imprime 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)

correr 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 é a 1.0.0, eu acho, você pode precisar usar pip install speedtest-cli --upgradepara atualizar.

Pelle
fonte
Beleza, obrigada! Por melhor que seja a resposta da @ dessert, foi isso que acabei usando devido à eficiência. Estou pesquisando a cada poucos minutos, portanto, aparar a gordura em chamadas desnecessárias é benéfico para mim.
Adam
@ Adam Você deve editar sua pergunta e alterá-la de acordo; o título não corresponde a esta resposta atualmente.
dessert
12

Esse é um trabalho para awk:

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

Explicações

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

Com sedisso é um pouco mais complicado:

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

Explicações

  • /D/!d- procure linhas que contenham De não ( !) as dexcluam, mas todas as outras linhas
  • s/A/B/- substitute AcomB
  • .* - pegue tudo
  • [^ ]*- pegue tudo o que não é ( ^) um espaço
  • (caractere de espaço) - um espaço literal
  • \(…\) - leve tudo para dentro e salve-o como um grupo
  • \1 - obtenha o conteúdo do grupo 1
sobremesa
fonte
1

Isso também funcionará:

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

Você pode tentar isso:

speedtest-cli --simple | grep "Download: " | sed "s/Download: //g"
AmeyaVS
fonte
2
Em vez de grepcombinado com sed, você pode simplesmente usar sed -ne acrescentar pno final da expressão, como speedtest-cli --simple | sed -nr 's/Download:\s*//p'.
Ruslan #
1

E depois há:

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

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

Stephen Boston
fonte
1
Raramente é útil para fazer grep ... | awk-speedtest-cli --simple | awk '/Download/{print $2}'
Muru