จะตัดผลลัพธ์ของ speedtest-cli ให้ส่งออกเฉพาะความเร็วในการดาวน์โหลดได้อย่างไร


8

ผมอยากจะเป็นระยะแสดงผลความเร็วในการดาวน์โหลดของฉัน Speedtest ในตัวบ่งชี้ sysmonitor

speedtest-cli มีเอาต์พุตที่ถูกตัดออกบ้างหากคุณรัน

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

มีวิธีใดในการตัดแต่งเอาต์พุตให้มากขึ้นลงไปที่ตัวเลขความเร็วในการดาวน์โหลด?


คุณสามารถใช้ --no-uploadตัวเลือกเพื่อไม่แสดงการอัปโหลด
αғsнιη

คำตอบ:


11

เช่นเดียวspeedtest-cliกับโปรแกรม python และ library มันค่อนข้างง่ายในการสร้างโปรแกรมทางเลือกที่น้อยที่สุดที่จะทำการทดสอบการดาวน์โหลดและพิมพ์ผลลัพธ์

เปิดตัวแก้ไขบันทึกเป็น 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 เนื่องจากตัวเลขทศนิยมที่ Mbps ปัดเศษเป็นทศนิยมหนึ่งตำแหน่งตามที่ร้องขอ

Speedtest-cli รุ่นขั้นต่ำสำหรับการทำงานนี้คือ 1.0.0 ฉันคิดว่าคุณอาจต้องใช้pip install speedtest-cli --upgradeเพื่ออัปเกรด


ความงามขอบคุณ! ที่ดีที่สุดเท่าที่คำตอบของ @essert คือนี่คือสิ่งที่ฉันลงเอยด้วยการใช้เนื่องจากมีประสิทธิภาพ ฉันสำรวจมันทุกสองสามนาทีดังนั้นการตัดแต่งไขมันจากการโทรที่ไม่จำเป็นนั้นมีประโยชน์สำหรับฉัน
Adam

@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/- substitute 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'
Ruslan

1

แล้วมี:

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

ชอบตัวเลือกแรกของหวานแม้ว่าจะไม่มีตัวเลือกบรรทัด


1
มันไม่ค่อยมีประโยชน์ที่จะทำgrep ... | awk-speedtest-cli --simple | awk '/Download/{print $2}'
muru
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.