Bagaimana cara memangkas hasil speedtest-cli hanya menghasilkan kecepatan unduhan?

8

Saya ingin menampilkan hasil unduhan speedtest secara berkala di indikator-sysmonitor .

speedtest-cli memiliki output yang agak terpangkas jika Anda menjalankan

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

Apakah ada cara untuk memangkas output lebih banyak lagi, turun ke hanya angka kecepatan unduhan?

Adam
sumber
Anda dapat menggunakan --no-uploadopsi untuk tidak menampilkan unggahan.
αғsнιη

Jawaban:

11

Seperti halnya speedtest-cliprogram python dan pustaka, cukup mudah untuk membuat program alternatif minimal yang hanya melakukan tes unduhan dan mencetak hasilnya.

Buka editor, simpan sebagai 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)

jalankan bersama python dl-speedtest.py

Ini memberikan hasil dalam bps, karena angka floating point Mbps dibulatkan menjadi satu desimal seperti yang diminta

Versi minimal speedtest-cli agar ini berfungsi adalah 1.0.0 Saya pikir, Anda mungkin perlu menggunakan pip install speedtest-cli --upgradeuntuk meningkatkan.

Pelle
sumber
Kecantikan, terima kasih! Sebagus jawaban @ hidangan penutup, inilah yang akhirnya saya gunakan karena efisiensi. Saya melakukan polling setiap beberapa menit sehingga mengurangi lemak pada panggilan yang tidak perlu itu bermanfaat bagi saya.
Adam
@ Adam Anda harus mengedit pertanyaan Anda dan mengubahnya sesuai itu - judulnya tidak cocok dengan jawaban ini saat ini.
hidangan penutup
12

Itu pekerjaan untuk awk:

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

Penjelasan

  • NR==2 - ambil garis 2
  • {print$2} - cetak kolom kedua (dipisahkan spasi secara default)
  • {print$2" "$3} - cetak kolom kedua diikuti oleh spasi dan yang ketiga

Dengan seditu sedikit lebih rumit:

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

Penjelasan

  • /D/!d- cari baris yang mengandung Ddan jangan hapus ( !) d, tetapi setiap baris lainnya
  • s/A/B/- substitute AdenganB
  • .* - ambil semuanya
  • [^ ]*- ambil semua yang bukan ( ^) spasi
  • (karakter spasi) - ruang literal
  • \(…\) - Ambil semuanya di dalam dan simpan sebagai grup
  • \1 - dapatkan konten grup 1
pencuci mulut
sumber
1

Ini juga akan berfungsi:

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

Anda dapat mencoba ini:

speedtest-cli --simple | grep "Download: " | sed "s/Download: //g"
AmeyaVS
sumber
2
Alih-alih grepdikombinasikan dengan sed, Anda cukup menggunakan sed -ndan menambahkan pdi akhir ekspresi, seperti speedtest-cli --simple | sed -nr 's/Download:\s*//p'.
Ruslan
1

Dan kemudian ada:

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

Suka pilihan pertama hidangan penutup meskipun tanpa pemilih garis.

Stephen Boston
sumber
1
Ini jarang berguna untuk dilakukan grep ... | awk-speedtest-cli --simple | awk '/Download/{print $2}'
muru