Làm cách nào để cắt kết quả của speedtest-cli để chỉ xuất tốc độ tải xuống?


8

Tôi muốn định kỳ hiển thị kết quả tốc độ tải xuống nhanh nhất của tôi trong chỉ số sysmonitor .

speedtest-cli có đầu ra hơi bị cắt bớt nếu bạn chạy

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

Có cách nào để cắt giảm sản lượng hơn nữa, chỉ bằng số tốc độ tải xuống không?


Bạn có thể sử dụng --no-uploadtùy chọn để không hiển thị tải lên.
αsнι

Câu trả lời:


11

speedtest-climột chương trình và thư viện python, thật dễ dàng để tạo một chương trình thay thế tối thiểu chỉ thực hiện kiểm tra tải xuống và in kết quả đầu ra.

Mở trình chỉnh sửa, lưu dưới dạng 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)

chạy với python dl-speedtest.py

Điều này cho kết quả tính bằng bps, vì số dấu phẩy động Mbps được làm tròn đến một số thập phân theo yêu cầu

Phiên bản tối thiểu của speedtest-cli để hoạt động này là 1.0.0 Tôi nghĩ, bạn có thể cần phải sử dụng pip install speedtest-cli --upgradeđể nâng cấp.


Làm đẹp, cảm ơn! Tuyệt vời như câu trả lời của @ Dessert, đây là những gì tôi đã sử dụng do hiệu quả. Tôi đang bỏ phiếu cứ sau vài phút để giảm béo cho những cuộc gọi không cần thiết có lợi cho tôi.
Adam

@Adam Bạn nên chỉnh sửa câu hỏi của mình và thay đổi câu hỏi sau đó - tiêu đề hiện tại không phù hợp với câu trả lời này.
tráng miệng

12

Đó là một công việc cho awk:

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

Giải thích

  • NR==2 - Đi đường 2
  • {print$2} - in cột thứ hai (theo khoảng cách theo mặc định)
  • {print$2" "$3} - in cột thứ hai theo sau là khoảng trắng và cột thứ ba

Với sednó phức tạp hơn một chút:

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

Giải thích

  • /D/!d- tìm kiếm các dòng có chứa Dvà không ( !) dbỏ qua chúng, nhưng mọi dòng khác
  • s/A/B/- substitute AvớiB
  • .* - lấy tất cả
  • [^ ]*- lấy mọi thứ không phải ( ^) một khoảng trống
  • (ký tự không gian) - một không gian theo nghĩa đen
  • \(…\) - lấy mọi thứ bên trong và lưu nó thành một nhóm
  • \1 - lấy nội dung của nhóm 1

1

Điều này cũng sẽ làm việc:

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

1

Bạn có thể thử điều này:

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

2
Thay vì grepkết hợp với sed, bạn chỉ cần sử dụng sed -nvà nối pvào cuối biểu thức, như thế nào speedtest-cli --simple | sed -nr 's/Download:\s*//p'.
Ruslan

1

Và sau đó là:

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

Giống như tùy chọn đầu tiên của món tráng miệng mặc dù không có bộ chọn dòng.


1
Nó hiếm khi hữu ích để làm grep ... | awk-speedtest-cli --simple | awk '/Download/{print $2}'
muru
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.