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

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

speedtest-cli имеет несколько усеченный вывод, если вы запустите

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

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

8
задан 4 October 2017 в 09:12

5 ответов

Поскольку 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 для обновления.

0
ответ дан 4 October 2017 в 09:12

И еще:

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

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

0
ответ дан 4 October 2017 в 09:12

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

speedtest-cli --simple | grep "Download: " | sed "s/Download: //g"
0
ответ дан 4 October 2017 в 09: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/sзамена A с B
  • .* – возьмите все
  • [^ ]* – возьмите все, что это не (^) пространство
  • (пробел) – литеральное пространство
  • \(…\) - включите все и сохраните его как группу
  • \1 – получите содержание группы 1
11
ответ дан 4 October 2017 в 19:12

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

speedtest-cli --simple | grep -E "Download:\s*" | sed -r 's/Download:\s*//'
1
ответ дан 4 October 2017 в 19:12

Другие вопросы по тегам:

Похожие вопросы: