Bu yazıda Pardus üçün sistemdə tətbiqləri işlədə bilən və onların çıxışlarını oxuya bilən sadə GTK3 tətbiqi hazırlayacağıq.

ilk dərsdə Yaratdığımız sadə şablon proqramımızı götürək və onun üzərində davam edək.

Glade ilə GTK3 interfeysimizi təkmilləşdirək

İlk dərsdən interfeysimizdə əsas GtkBox3-cü üzvümüzə GtkLabel əlavə edək.

əlavə etdik GtkLabelnin adı lbl_çıxışı edək. Çalışacağımız proqramların çıxışlarını bu etiketdə çap edəcəyik.

orta düymədə "Mən kiməm"Gəlin yazaq:

Artıq Hello World etiketinə ehtiyacımız yoxdur. Yenidən yerinə bir düymə qoyaq və bu düymə kök kataloqun məzmununu ehtiva edəcəkdir. lbl_çıxışı etiketdə çap edin.(btn_list)

Düymələrimizə "tıkladı"yaxşı"kliklədi' siqnallarını əlavə edək.

  • on_btn_listele_clicked
  • on_btn_me_kim_klik etdi

İnterfeysimiz hazırdır. İndi keçək proqram hissəsinə.

Python ilə alt proqrama zəng etmək

Python3-də yazdığımız proqramın içindən başqa bir proqramı işə salmaq və onun çıxışını oxumaq istədikdə bu, Python3-də standartdır. alt prosess Kitabxanadan istifadə edəcəyik.

Birincisi, alt proses MainWindow.py Gəlin onu faylımıza daxil edək:

idxal alt prosesi

alt proseslə proqramı işə salmaq subprocess.run() funksiyasından istifadə edirik.

subprocess.run("whoami", capture_output=Doğru)

tutma_çıxışı sənin bayrağın Doğru Çalışan prosesin stdout və stderr çıxışlarını oxuya bilərik.

Mən kiməm, Proqramı işlədən istifadəçinin adını ekranda çap edən proqramdır.

proses = subprocess.run("whoami", capture_output=True)print(process.stdout) # Standart Çıxış çıxışları print(process.stderr) # Standart Xəta, əgər xəta varsa çap edir(process.returncode) # Prosesin qaytarılması kodu.

İndi "Mən kiməm” düyməmizin işləyəcəyi funksiyanı yazaq, lakin bundan əvvəl lbl_output teqimizin məzmununu dəyişdirməliyik. MainWindow.py Gəlin müəyyən edək:

sinif MainWindow: def __init__(self, app): # Gtk Builder self.builder = Gtk.Builder() # UI faylını idxal edin: self.builder.add_from_file("MainWindow.glade") self.builder.connect_signals(self) # Pəncərə self.window = self.builder.get_object("window") self.window.set_application(app) # Gəlin Glade-dəki elementlərdən istifadə etmək üçün dəyişəni təyin edək: self.defineComponents() # <-------- --- --- # Pəncərəni göstər self.window.show_all() def defineComponents(self): self.lbl_output = self.builder.get_object("lbl_output")

İndi btn_me_mən kiməm Düyməmizin işləyəcəyi funksiyanı yazaq:

def on_btn_me_kim_clicked(self, btn): proses = subprocess.run(["whoami"], capture_output=Doğru) çıxış = process.stdout.decode("utf-8") self.lbl_output.set_label(çıxış)

Prosesimizin çıxışı Python3-dədir bytes çünki o tipdir decode Biz onu funksiya ilə sətirə çevirməliyik: process.stdout.decode("utf-8")

Beləliklə, biz whoami əmrini işlədirik və onun çıxışını oxuyuruq və lbl_çıxışı-a yazmışıq.

Geri btn_list Bizdə bir düymə qalıb, onun məntiqi eynidir, yalnız işlədəcəyimiz proqramı dəyişəcəyik, ls / edəcəyik.

    def on_btn_listele_clicked(self, btn): proses = subprocess.run(["ls", "/"], capture_output=Doğru) çıxış = process.stdout.decode("utf-8") self.lbl_output.set_label(çıxış)

Bəli, proqramımız hazırdır, indi siz istədiyiniz proqramları işlədə və onların çıxışlarını oxuya bilərsiniz.

Proqramımızın nəticəsi

Python-da alt proses kimi sistem zəngləri edə biləcəyimiz başqa bir kitabxana: os

import os Bu kitabxananı əlavə etdikdən sonra istifadə olunan əməliyyat sistemi haqqında məlumat əldə edə, daxil olan istifadəçiyə baxa, faylları siyahıya ala, mühit dəyişənlərini təyin edə bilərsiniz (Ətraf Dəyişənləri) oxuya bilərsiniz.

import os.getenv("PATH") # PATH mühit dəyişənini oxuyun. os.getlogin() # Daxil olmuş istifadəçi adı. os.getuid() # Daxil olmuş istifadəçinin ID-si user.os.getpid() # Çalışan prosesin ID-si. os.getppid() # Çalışan prosesin ana proses identifikatoru # ... Və daha bir çox sistem əmrləri.

os kitabxanasına və funksiyalarına görə: https://docs.python.org/3/library/os.html

Başqa bir kitabxana pathlib .

yenə import pathlib Proqramımıza daxil edə biləcəyimiz bu kitabxana ilə kataloq yolu əməliyyatlarını yerinə yetirə bilərik.

import pathlibpath = pathlib.Path('/') path.is_dir() # Bu yol kataloq yoludurmu path.exists() # Bu yol varmı# ...

pathlib kitabxanasına və funksiyalarına görə: https://docs.python.org/3/library/pathlib.html

Bu yazıda biz sadəcə Python3 və GTK3 istifadə edərək sistemin özü və sistem tətbiqləri ilə qarşılıqlı əlaqə nümunəsini həyata keçirdik.

salamlar.