- Pardus’a Uygulama Geliştirme Rehberi (GTK3) #2
- Pardus’a Uygulama Geliştirme Rehberi (GTK 3)
Bu yazıda Pardus’a sistemdeki uygulamaları çalıştırıp çıktılarını okuyabilen basit bir GTK3 uygulaması yapacağız.
İlk derste oluşturduğumuz basit şablon programımızı alalım ve üzerine devam edelim.
Glade ile GTK3 arayüzümüzü geliştirelim
İlk dersten kalan arayüzümüzde ana GtkBox’ımızın 3. elemanına bir GtkLabel ekleyelim.
Eklediğimiz GtkLabel’ın ismini lbl_output yapalım. Bu etiketimize(label) çalıştıracağımız programların çıktılarını bastıracağız.
Ortadaki butona da “Ben kimim” yazalım:
Merhaba Dünya etiketine ihtiyacımız kalmadı. Onun yerine de yine bir buton koyalım ve bu buton kök dizinin içeriğini lbl_output etiketine yazdırsın.(btn_listele)
Butonlarımıza “clicked” yani “tıklandı” sinyallerini ekleyelim.
- on_btn_listele_clicked
- on_btn_ben_kimim_clicked
Arayüzümüz hazır. Şimdi program kısmına geçelim.
Python ile alt program çağırma
Python3’te yazdığımız program içerisinden başka bir programı çalıştırıp çıktısını okumak istediğimizde Python3’te standart olarak bulunan subprocess kütüphanesini kullanacağız.
Öncelikle subprocess’i MainWindow.py dosyamıza dahil edelim:
import subprocess
subprocess ile bir programı çalıştırmak için subprocess.run() fonksiyonunu kullanıyoruz.
subprocess.run("whoami", capture_output=True)
capture_output bayrağını True yaparak çalıştırılan processin stdout ve stderr çıktılarını okuyabiliriz.
whoami, programı çalıştıran kullanıcının ismini ekrana yazdıran bir programdır.
process = subprocess.run("whoami", capture_output=True)print(process.stdout) # Standart Output çıktıları print(process.stderr) # Bir hata olduysa Standart Error çıktıları print(process.returncode) # Process'in return kodu.
Şimdi “Ben kimim” butonumuzun çalıştıracağı fonksiyonu yazalım, fakat ondan önce lbl_output etiketimizin içeriğini değiştirmek için MainWindow.py içinde tanımlayalım:
class MainWindow: def __init__(self, app): # Gtk Builder self.builder = Gtk.Builder() # Import UI file: self.builder.add_from_file("MainWindow.glade") self.builder.connect_signals(self) # Window self.window = self.builder.get_object("window") self.window.set_application(app) # Glade'deki elemanlari kullanmak icin degiskene atayalim: self.defineComponents() # <-------------- # Show window self.window.show_all() def defineComponents(self): self.lbl_output = self.builder.get_object("lbl_output")
Şimdi btn_ben_kimim butonumuzun çalıştıracağı fonksiyonu yazalım:
def on_btn_ben_kimim_clicked(self, btn): process = subprocess.run(["whoami"], capture_output=True) output = process.stdout.decode("utf-8") self.lbl_output.set_label(output)
Process’imizin çıktısı Python3’te bytes tipinde olduğu için önce onu decode fonksiyonu ile string’e çevirmeliyiz: process.stdout.decode("utf-8")
Böylece whoami komutunu çalıştırıp çıktısını okuduk ve lbl_output’a yazdırdık.
Geriye btn_listele butonumuz kaldı, onun mantığı da aynı şekilde, sadece çalıştıracağımız programı değiştireceğiz,
yapacağız.ls /
def on_btn_listele_clicked(self, btn): process = subprocess.run(["ls", "/"], capture_output=True) output = process.stdout.decode("utf-8") self.lbl_output.set_label(output)
Evet programımız hazır, artık siz de istediğiniz programları çalıştırıp çıktılarını okuyabilirsiniz.
Python’da subprocess gibi sistem çağrıları yapabildiğimiz diğer bir kütüphane ise: os
ile bu kütüphaneyi ekledikten sonra kullanılan işletim sistemi hakkında bilgi edinebilir, giriş yapmış kullanıcıyı görebilir, dosyaları listeleyebilir, ortam değişkenlerini (Environment Variables) okuyabilirsiniz.import os
import os.getenv("PATH") # PATH ortam değişkenini okuma. os.getlogin() # Oturum açmış kullanıcı adı. os.getuid() # Oturum açmış kullanıcı ID'si.os.getpid() # Çalışan process'in ID'si. os.getppid() # Çalışan process'in ebeveyn process ID'si.# ... Ve daha bir çok sistem komutu.
os kütüphanesi ve fonksiyonları için: https://docs.python.org/3/library/os.html
Bir diğer kütüphanemiz ise
.pathlib
Yine
şeklinde programımıza dahil edebileceğimiz bu kütüphane ile dizin yolları işlemleri gerçekleştirebiliyoruz.import pathlib
import pathlibpath = pathlib.Path('/') path.is_dir() # Bu yol bir dizin mi path.exists() # Bu yol mevcut mu# ...
pathlib kütüphanesi ve fonksiyonları için: https://docs.python.org/3/library/pathlib.html
Bu yazıda basitçe Python3 ve GTK3 kullanarak sistemin kendisi ve sistem uygulamalarıyla etkileşime geçme örneği gerçekleştirdik.
Selametle kalınız.