Як обрізати результат speedtest-cli, щоб вивести тільки швидкість завантаження?


8

Мені хотілося б періодично відображати свій швидкісний результат швидкості завантаження в індикаторі-системоніторі .

speedtest-cli має дещо підрізаний вихід, якщо ви працюєте

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

Чи є якийсь спосіб зменшити результат ще більше, аж до цифри швидкості завантаження?


Ви можете використовувати --no-uploadопцію, щоб також не відображати завантаження.
αғsnιη

Відповіді:


11

Оскільки speedtest-cliпрограма і бібліотека пітона досить складно зробити мінімальну альтернативну програму, яка виконує лише тест завантаження та друкує вихід.

Відкрийте редактор, збережіть як 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

Це дає результат у bps, оскільки число з плаваючою комою Мбіт / с округлюється до однієї десяткової точки за потребою

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


Краса, спасибі! Настільки ж чудова відповідь @ десерту, саме цим я і закінчився, завдяки ефективності. Я опитую це кожні кілька хвилин, тому обрізка жиру на непотрібних дзвінках корисна для мене.
Адам

@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/- sубститут AсB
  • .* - візьми все
  • [^ ]*- займіть усе, що не є ( ^) пробілом
  • (пробіл символу) - буквальний простір
  • \(…\) - візьміть усе всередині і збережіть його як групу
  • \1 - отримати зміст 1 групи


1

Ви можете спробувати це:

speedtest-cli --simple | grep "Download: " | sed "s/Download: //g"

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}'
muru
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.