Daemon ve PyGtk Programlama

Başlatan karboran, 27 Temmuz 2013 - 20:11:23

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

karboran

Staj yaptığım yerden pazartesiye kadar basit bi daemon yazıp bunu python Gtk ile hazırladığım basit bir uygulamaya(bu daemonu) bağlanmam istendi. PythonGtk ile hazırlanacak olan uygulama kolay . Daemonun ne olduğunu ne işe yaradığınıda az buçuk öğrendim lakin nedir nasıl yazılır bu bağlama işlemini nasıl yapacağım hiç bir bilgim yok. Yardımlarınızı şiddetle bekliyorum oruç oruç kafayı yiyeceğim.
(Cevap gelene kadar PythonGTK ile textFiled e yazdığı yazıyı kaydet butonuna bastığı zaman home da bir txt ye kaydeden program yazayım.)
Kabin basıncı düştü motorlarda arıza !
Vakit süratle aksın hakimiyet kur nabıza !
İçinden nasıl geldiyse yaz anlat herşeyi ,
Bu mektup varmıcak hayalini kurduğun kıza !

egcodes

Gtk program ile bu daemon arasında iletişimi nasıl sağlayacağını soruyorsan (ben bunu anladım) en basitinden bir txt dosya oluşturursun daemon çıktılarını oraya yazar. Gtk programında buradan daemon çıktısına göre ekrana ne basacağını bilir.


Biraz daha açıklayacı yazabilirsen belki daha faydalı yardım edebilirim.

Kolay gelsin.
1f u c4n r34d th1s u r34lly n33d t0 g37 l41d

karboran

#2
Süper hemen biraz daha açıklıyorum .

Altta yazmış olduğum gtk programı yazılan yazıyı txt dosyasına kaydediyor.Ne olup bittiğinide print le arkada yazdırıyo.
Bu programa daemon yazıp bağlayacaz daemonun içeriği bize kalmış canımız ne istiyorsa.




GtkApp.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

#Python Daemon Gtk Working
#Yusuf DÜZGÜN ysfduzgun92@gmail.com
#2013 July



import pygtk
from Tkconstants import CENTER
pygtk.require('2.0')
import gtk
from fileWorks import runNER


class RegistryApp:
   
       
    def destroy(self,widget,data=None):
        gtk.main_quit()
        print("Window terminated !")

    def clearEntry(self,widget,entry):
        self.entry.set_text("")
        print("------entry is clear!")
   
    def save(self,widget,entry):
        word = self.entry.get_text()
        runNER(word)
        print(word)
        self.label2.set_text("Last saved is: "+word)
   
   
    def __init__(self):
       
        #Window Settings !
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.window.set_title("Registry Application")
        self.window.connect("destroy",self.destroy)
        self.window.set_position(CENTER)
       
        #Box Settings
        self.box1 = gtk.VBox(False,10)
        self.window.add(self.box1)
        #self.frame = gtk.Frame()
        #self.window.add(self.frame)
       
        #Label1 Settings
        text1 = ("   Plase write something after press Registry!   ")
        self.label1=gtk.Label(text1)
        self.box1.pack_start(self.label1,True,True,0)
       
        #Text1 Entry Settings
        self.entry = gtk.Entry()
        self.entry.set_max_length(50)
        self.box1.pack_start(self.entry,True,True,0)
       
        #Button1 Settings
        self.button1 = gtk.Button("SaVe")
        self.button1.connect("clicked",self.save,None)
        self.box1.pack_start(self.button1,True,True,0)
       
        #Button2 Settings
        self.button2 = gtk.Button("Clear & New Reg")
        self.button2.connect("clicked",self.clearEntry,self.entry)
        self.box1.pack_start(self.button2,True,True,0)
       
        #Label2 Settings
        self.label2=gtk.Label("Status ...")
        self.box1.pack_start(self.label2,True,True,0)
       
        #show
        self.window.show_all()
       
   
    def main(self):
        gtk.main()
       
if __name__ == "__main__":
    x = RegistryApp()
    x.main()
   


fileWorks.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

#Python Daemon Gtk Working
#Yusuf DÜZGÜN ysfduzgun92@gmail.com
#2013 July

file_name = "/home/ysf/pyTest.txt"
def do_create_file():
        try:
            f = open(file_name,"r")
            print("file is fond")
            return True
        except IOError:
            print("file is not found")
            open(file_name,"w")
            print("file is created")
            return True
       
def do_write_file(keyword):
    F=open(file_name,"a")
    s = keyword
    s=s+"\n"
    F.write(s)
    F.close()
       
def runNER(word):
    yes = do_create_file()
    if yes==True:
        do_write_file(word)




Kabin basıncı düştü motorlarda arıza !
Vakit süratle aksın hakimiyet kur nabıza !
İçinden nasıl geldiyse yaz anlat herşeyi ,
Bu mektup varmıcak hayalini kurduğun kıza !

egcodes

Örneğin daemon'ın ne yapmasını istiyorsun ona göre bir şeyler söyleyebilirim.

Örnek dosya içeriği değişip değişmediğini kontrol eden bir daemon değişti mi bir txt dosyasına yeni 10 karakter geldi gibi bir şey yazsın. Arayüzde böyle bir dosya gördümü desin ki "daemon diyor ki 10 yeni karakter gelmiş" bunun gibi bir şey mi :)
1f u c4n r34d th1s u r34lly n33d t0 g37 l41d

karboran

Aynen Aynen :)  Bunu yapabilirsek çok çook sevinirim :)
Kabin basıncı düştü motorlarda arıza !
Vakit süratle aksın hakimiyet kur nabıza !
İçinden nasıl geldiyse yaz anlat herşeyi ,
Bu mektup varmıcak hayalini kurduğun kıza !

egcodes

Yani aynı mantık işte. Daemon while içerisinde saniyede bir dosyanin md5 değerine baksın değişmiş ise daemonResult.txt isimli bir dosyaya mesajını yazsın. 

Gtk programıda daemonResult.txt dosyasını saniyede bir kontrol etsin. Eğer bir mesaj varsa veya değişmiş ise messageBox ile kullanıcı uyarsın.

Tabi bu saçma bir program oldu ama en basitinden bu şekilde yapabilirsin.

Birde dosya oluşturmak için kullandığın path '/home/ysf/..' yerine ~ karakterini kullanki her bilgisayarda hatasız çalışsın. ~ karakteri home klasörünü işaret eder.

Kolay gelsin.
1f u c4n r34d th1s u r34lly n33d t0 g37 l41d

karboran

Bu daemonuda mı Python da yazacağım ? . Daemon hakkında hiç  bir şey bilmiyorum . Biraz daha açarsanız çok makbule geçer . Okudum bi kaç siteden Parent var child var . Parenti childe e kopyalıyoz sonra parenti öldürüp child ı parent yapıyoz felan :D .

https://pypi.python.org/pypi/python-daemon/   python-daemon diye bi kütüphane var.
C'de de Java'da da daemon yazılıyo.
Bi garip ya anlamadım gitti.

Ek olarak ~
IOError: [Errno 2] No such file or directory: '~/pyTest.txt'
hatası alıyorum :)

Kabin basıncı düştü motorlarda arıza !
Vakit süratle aksın hakimiyet kur nabıza !
İçinden nasıl geldiyse yaz anlat herşeyi ,
Bu mektup varmıcak hayalini kurduğun kıza !

egcodes

O dosyası home klasöründe elle oluştur yada kod ile oluştur.

Daemon'a gelince  ingilizcen olsun olmasın burdaki kodlar en temel hali. Bu örneği uyarlayabilirsin (http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/)

Kolay gelsin
1f u c4n r34d th1s u r34lly n33d t0 g37 l41d

karboran

Dosya için yazdığım kod , dosya varmı diye bakıyor varsa devam, yok ise oluşturup yazıyor.
ama ~ işareti ile kabul etmedi.

Daemon meselesine gelince de bu *bağlantı karşıma çıkmıştı ama baktım çok uzun bu kadar uzun olmasa gerek demiş atlamıştım, tekrar üstüne düşe düşe bi bakayım.
Sonuçları buraya yazarım tekrar.

Teşekkürler kolay gelsin :)
Kabin basıncı düştü motorlarda arıza !
Vakit süratle aksın hakimiyet kur nabıza !
İçinden nasıl geldiyse yaz anlat herşeyi ,
Bu mektup varmıcak hayalini kurduğun kıza !

egcodes

Kafam karışmış. Şöyle olacak. Şununlarla home klasörünü alabilirsin 
os.path.expanduser('~')
#ya da şu
os.environ['HOME']


Kolay gelsin
1f u c4n r34d th1s u r34lly n33d t0 g37 l41d