Как обрезать результат speedtest-cli, чтобы выводить только скорость загрузки?

8

Я хотел бы периодически отображать мой результат скорости самой быстрой загрузки в индикатор-системном мониторе .

Speedtest-Cli имеет несколько обрезанный вывод, если вы запускаете

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

Есть ли способ урезать вывод еще больше, вплоть до цифры скорости загрузки?

Адам
источник
Вы можете использовать --no-uploadопцию, чтобы не отображать загрузку либо.
αғsнιη

Ответы:

11

Как speedtest-cliи программа и библиотека на python, довольно легко создать минимальную альтернативную программу, которая выполняет только тест загрузки и печатает вывод.

Откройте редактор, сохраните как 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)

бежать с python dl-speedtest.py

Это дает результат в бит / с, как число с плавающей запятой, Мбит / с, округленное до одного десятичного знака в соответствии с запросом

Минимальная версия speedtest-cli для этого - 1.0.0. Я думаю, что вам может потребоваться pip install speedtest-cli --upgradeобновление.

Pelle
источник
Красавица, спасибо! Как ни крути ответ @ десерт, это то, что я в конечном итоге использовал из-за эффективности. Я опрашиваю его каждые несколько минут, так что обрезка лишних звонков мне выгодна.
Адам
@Adam Вы должны отредактировать свой вопрос и изменить его соответственно - заголовок не соответствует этому ответу в настоящее время.
десерт
12

Это работа для awk:

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

Пояснения

  • NR==2 - взять линию 2
  • {print$2} - напечатать второй столбец (по умолчанию разделенный пробелами)
  • {print$2" "$3} - напечатать второй столбец, затем пробел и третий

С sedэтим немного сложнее:

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

Пояснения

  • /D/!d- искать строки, содержащие Dи не ( !) dвыбирать их, но каждую другую строку
  • s/A/B/- substitute AсB
  • .* - возьми все
  • [^ ]*- взять все, что не ( ^) пробел
  • (пробел) - буквальное пространство
  • \(…\) - взять все внутри и сохранить как группу
  • \1 - получить содержание группы 1
Десерт
источник
1

Это также будет работать:

speedtest-cli --simple | grep -E "Download:\s*" | sed -r 's/Download:\s*//'
Джордж Удосен
источник
1

Вы можете попробовать это:

speedtest-cli --simple | grep "Download: " | sed "s/Download: //g"
AmeyaVS
источник
2
Вместо того, чтобы grepкомбинировать с sed, вы можете просто использовать sed -nи добавлять pв конце выражения, например speedtest-cli --simple | sed -nr 's/Download:\s*//p'.
Руслан
1

И тогда есть:

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

Как первый вариант десерта, хотя без селектора строки.

Стивен Бостон
источник
1
Это редко полезно делать grep ... | awk-speedtest-cli --simple | awk '/Download/{print $2}'
Муру