Я хотел бы периодически отображать мой результат скорости самой быстрой загрузки в индикатор-системный монитор .
speedtest-cli имеет несколько усеченный вывод, если вы запустите
$ speedtest-cli --simple
Ping: 50.808 ms
Download: 10.87 Mbit/s
Upload: 4.47 Mbit/s
Есть ли способ обрезать вывод еще больше, вплоть до цифры скорости загрузки?
Поскольку 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
Это дает результат в бит / с, как число с плавающей запятой strike> Мбит / с округляется до одного десятичного знака в соответствии с запросом
Минимальная версия speedtest-cli, чтобы это работало, - 1.0.0. Я думаю, вам может потребоваться использовать pip install speedtest-cli --upgrade
для обновления.
И еще:
speedtest-cli --simple | grep Download | awk '{print $2}'
Как первый вариант десерта, но без селектора строк.
Вы можете попробовать это:
speedtest-cli --simple | grep "Download: " | sed "s/Download: //g"
Это - задание для 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Это будет также работать:
speedtest-cli --simple | grep -E "Download:\s*" | sed -r 's/Download:\s*//'