Bir de arkadaşın yazdığı kodlarla ilgili şöyle bir durum var. ping google.com ifadesinde kaç tane ping gönderileceği belli değil. Ping komutunun -c diye bir argümanı var. count anlamına geliyor. Kullanımı ise şu şekilde:
os.system("ping google.com -c 1 > /dev/null")
Yukarıdaki koda göre 1 tane ping isteği (request) gönderilir ve 1 tane yanıt (response) alınır.
Yani bir ağa bağlı olup olmadığınızı kontrol etmek için sadece 1 tane ping göndermeniz yeterli olur. Kodlarınızı da şu şekilde değiştirmeniz gerekiyor.
import os
wifi_b = str(os.system("ping google.com -c 1 > /dev/null"))
if wifi_b == "0":
print(":)")
else:
print(";(")
veya subprocess modülünü kullanarak şöyle de yapabilirsiniz:
Bu arada os.system kullandığınızda 0 sayısı veya bir hata durumunda başka bir sayı return edilir. Siz de zaten bu 0 sayısının return edilip edilmemesine göre bir ağa bağlı olup olmadığınızı sorguluyorsunuz. Ancak subprocess kullanırken, ağa bağlı olup olmadığınızı daha farklı bir yol izleyerek kontrol etmeniz gerekecektir. Mesela çıktılar arasındaki farka göre herhangi bir ağa bağlı olup olmadığınızı sorgulayabilirsiniz.
Veya urllib gibi, çalışması için bir ağa bağlı olmayı gerektiren kütüphanelerden birini de kullanabilirsiniz. Tercih size kalmış.
Bağlantı olup olmadığını kontrol etmek için, internet olduğu sürece çalışan herhangi bir modül kullanılabilir. Bağlantı yoksa zaten bu modüller otomatik olarak bir hata yükseltecektir.
Bu da bir yöntem elbette ancak işi sadece internet bağlantısı var mı yok mu diye kontrol eden bir modül daha doğru bir yol değil mi?
Bu tarz bir yöntemle değil de işletim sistemini kullanarak yapan bir modül.
İnternet bağlantısının olup olmadığını kontrol etmek o kadar zor değil ki, bunun için bir modül oluşturulsun. Yani birçok modülü bu amaç için kullanabiliriz. Sadece özel olarak bu iş için bir modül tasarlamak bence gerekli değil.