Yukarıdaki yazılardan dbus ın matığını az çok anladınız.
Ben ilk olarak kodları vereyim.
Asıl işi görecek olan getAllUnixDevices olacak.İlk olarak getAllUnixDevices çalışır bu kodda. Bu kodlardaki deviceList fonksiyonu bize usb olsun olmasın hardiskinden tut CD sine usb sine kadar bütün device ları elde eder(bütün device ları bir anda listelemez,Sadece findUSBDevices fonksiyonuna daha kolay parametre vermek için yazdım o fonksiyonu). findUSBDevices fonksiyonu, adı üstünde, deviceList fonksiyonundan elde edilen verileri kullanarak bize tuple veri tipi döner.tuple ın 1. değeri usb ise True, değilse False değeri alır.tuple ın 2. değeri parametre olarak verilen değerdir.Ama işimiz daha bitmemiştir.Bir de kullanıcıya bunu uygun formatta göstermek gerekiyor.Onu da getAllUnixDevices foksiyonu içinde zaten yapıyorum.
Öyleyse ilk inceleyeceğimiz kod parçası, aşağıda
Resimdeki List methodunu çalıştırın.Önünüze anlamsız sonuçlar gelecek.Öyleyse bu sonuçları anlamlı bir şekle sokmamız lazım.Linux da usb girdiğinde /devdizini altında sdb, sdc gibi sembolik dosyalar oluşur.İşte bunlar block_device lardır.
Gördüğünüz gibi bu anlamsız biçimi şekle sokmak için for döngüsü kullandım.Öncelikle _listdevice değişkeni bir liste veri tipidir.(Aslında öyle değil ama kafa karışıklığı olmasın) _liststore değişkeninin ilk değeri benim için daha iy. Çünkü sdb sdc gibi ifadeler o bölümde geçiyor. sonra o i ifadesini de for döngüsüne aldım.Çünkü _liststore[0] dan gelen i değişkenini de list gibi olduğu, ayrıca birden fazla device olduğu için böyle yaptım. gördüğünüz gibi önce deviceList fonksiyonunu, sonra deviceList fonksiyonundan aldığım değişkeni findUSBDevices değişkenine vererek o device ın usb olup olmadığını kontrol ettim.
doğruysa,yani o cihaz usb ise
kod parçasıyla o usb nin kaç gb, terabayt , mb olduğunu bulmak için bu kod parçasından değer alıyorum.Ama aldığım değer sadece usb nin kaç bayt olduğunu veriyor.Bizim onu anlamlı bir veriye dönüştürmemiz lazım. if bloğu içnde round ile değerleri yuvarlıyorum.Yoksa biraz anlamsız oluyor.
En sonunda ise en başta oluşturduğum device adlı listeye bu verileri ekliyorum.append ile kattığımız verileri de bir inceleyelim.
Cihazın vendorunu veriyor.Sandisk, Kingston vs.
Burada o cihazın modelini bastırıyorum.
Bize usb için /dev/ dizini altında oluşturulmuş sembolik dosya patikasını verir.
Bu da bize usb uzunluğunu bayt cinsinden verir
Aslında bu scripti kendi projem için yazmıştım ama başkalarına yararlı olmak adına bu scripti anlatmak istedim.Kafanıza karışık gelen yerler olabilir.Sıkıntı yapmayın.Olmadı benle iletişime geçin.