nnomad
Bilgin
- Katılım
- 21 Aralık 2024
- Mesajlar
- 1.385
- Makaleler
- 4
- Çözümler
- 11
- Beğeniler
- 1.169
Speedtest CLI kurulum rehberi.
BU REHBERİN KOD AŞAMASINDA YAPAY ZEKADAN DESTEK ALINMIŞTIR.
Arkadaşlar merhaba. Bu rehberde kurulum rehberindede bahsettiğim Speedtest CLI periyodik hız ölçüm aracını nasıl kurarsınız onu anlatacağım.
KURULUM İÇİN GEREKENLER:
KURULUM
CLI'i indirdiğiniz zip dosyasından çıkarın ve exeyi C: diski içerisinde SpeedtestCLI adını verdiğiniz klasörün içerisine atın.
Masaüstüne hiz_testi adında bir metin belgesi açın ve içerisine bu kodu yapıştırın.
Sonrasında farklı kaydet seçeneğini seçin, tüm dosyaları seçin ve .txt'yi .py olarak değiştirip kaydedin. Kendisi rapor metin belgesini masaüstünde açacaktır.
Tavsiyem 3 dakika ve üstünde testi yaptırmanız. 1 dakika ve altında Ookla engel atabiliyor.
Hata ile karşılaşırsanız lütfen belirtin halledelim. Okuduğunuz için teşekkürler.
PROGRAMDAN GÖRSELLER
BU REHBERİN KOD AŞAMASINDA YAPAY ZEKADAN DESTEK ALINMIŞTIR.
Arkadaşlar merhaba. Bu rehberde kurulum rehberindede bahsettiğim Speedtest CLI periyodik hız ölçüm aracını nasıl kurarsınız onu anlatacağım.
KURULUM İÇİN GEREKENLER:
- Speedtest CLI
- Python
KURULUM
CLI'i indirdiğiniz zip dosyasından çıkarın ve exeyi C: diski içerisinde SpeedtestCLI adını verdiğiniz klasörün içerisine atın.
Masaüstüne hiz_testi adında bir metin belgesi açın ve içerisine bu kodu yapıştırın.
Python:
import os
import sys
import time
import json
import subprocess
from datetime import datetime
import tkinter as tk
from tkinter import simpledialog, messagebox
# ==============================================================================
# made by nnomad with love <3 https://techolay.net/sosyal/uye/nnomad.14373/
# ==============================================================================
SPEEDTEST_PATH = r"C:\SpeedtestCLI\speedtest.exe"
def arka_plan_temizle():
try:
if os.name == 'nt':
subprocess.run(["taskkill", "/F", "/IM", "speedtest.exe"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
except Exception:
pass
def hiz_testi_yap():
print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] Hız testi başlatılıyor, lütfen bekleyin...")
arka_plan_temizle()
time.sleep(1)
komut = SPEEDTEST_PATH if os.path.exists(SPEEDTEST_PATH) else "speedtest"
try:
islem = subprocess.run(
[komut, "--format=json", "--accept-license", "--accept-gdpr"],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True,
check=True
)
veri = json.loads(islem.stdout)
download_mbps = veri["download"]["bandwidth"] * 8 / 1_000_000
upload_mbps = veri["upload"]["bandwidth"] * 8 / 1_000_000
ping_ms = veri["ping"]["latency"]
server_isim = veri["server"]["name"]
server_konum = veri["server"]["location"]
return {
"durum": "Basarili",
"download": round(download_mbps, 2),
"upload": round(upload_mbps, 2),
"ping": round(ping_ms, 2),
"server": f"{server_isim} ({server_konum})"
}
except FileNotFoundError:
return {"durum": "Hata", "mesaj": f"speedtest.exe bulunamadı: {SPEEDTEST_PATH}"}
except subprocess.CalledProcessError as e:
return {"durum": "Hata", "mesaj": f"CLI Çalıştırma Hatası: {e.stderr.strip() if e.stderr else str(e)}"}
except Exception as e:
return {"durum": "Hata", "mesaj": f"Hata oluştu: {str(e)}"}
def rapora_yaz(sonuc):
"""Test sonuçlarını rapor.txt dosyasına ekler."""
kod_klasoru = os.path.dirname(os.path.abspath(__file__))
dosya_adi = os.path.join(kod_klasoru, "rapor.txt")
zaman_damgasi = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
dosya_mevcut = os.path.exists(dosya_adi)
with open(dosya_adi, "a", encoding="utf-8") as f:
if not dosya_mevcut:
f.write("=== SPEEDTEST PERİYODİK HIZ RAPORU ===\n")
f.write("-" * 60 + "\n")
if sonuc["durum"] == "Basarili":
satir = f"[{zaman_damgasi}] Sunucu: {sonuc['server']} | Ping: {sonuc['ping']} ms | Download: {sonuc['download']} Mbps | Upload: {sonuc['upload']} Mbps\n"
else:
satir = f"[{zaman_damgasi}] HATA: {sonuc['mesaj']}\n"
f.write(satir)
print(f"[{zaman_damgasi}] Sonuç kaydedildi.")
def ana_program():
root = tk.Tk()
root.withdraw()
kullanici_girdisi = simpledialog.askstring(
"Speedtest Ayarı",
"Testlerin kaç dakikada bir yapılmasını istersiniz?\n(Örn: 5, 10, 0.5):"
)
if kullanici_girdisi is None:
print("İşlem kullanıcı tarafından iptal edildi.")
return
try:
periyot_dakika = float(kullanici_girdisi)
if periyot_dakika <= 0:
messagebox.showerror("Hata", "Lütfen 0'dan büyük bir değer giriniz.")
return
periyot_saniye = periyot_dakika * 60
except ValueError:
messagebox.showerror("Hata", "Geçersiz bir sayı girdiniz.")
return
messagebox.showinfo("Başarılı", f"Program başlatıldı!\nHer {periyot_dakika} dakikada bir test yapılacak.\n\nDurdurmak için CMD ekranını kapatabilirsiniz.")
print(f"\nProgram arka planda çalışıyor. Periyot: {periyot_dakika} dakika.")
try:
while True:
sonuc = hiz_testi_yap()
rapora_yaz(sonuc)
arka_plan_temizle()
time.sleep(periyot_saniye)
except KeyboardInterrupt:
print("\nProgram sonlandırıldı.")
if __name__ == "__main__":
ana_program()
Sonrasında farklı kaydet seçeneğini seçin, tüm dosyaları seçin ve .txt'yi .py olarak değiştirip kaydedin. Kendisi rapor metin belgesini masaüstünde açacaktır.
Tavsiyem 3 dakika ve üstünde testi yaptırmanız. 1 dakika ve altında Ookla engel atabiliyor.
Hata ile karşılaşırsanız lütfen belirtin halledelim. Okuduğunuz için teşekkürler.
PROGRAMDAN GÖRSELLER