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.)
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.
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.
(https://forum.ubuntu-tr.net/proxy.php?request=http%3A%2F%2Fo1307.hizliresim.com%2F1c%2Fw%2Fqvbrn.png&hash=b12e8e1bf5b1d09231ab6e18726f4b84aba5c87a)
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)
Ö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 :)
Aynen Aynen :) Bunu yapabilirsek çok çook sevinirim :)
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.
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 :)
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/ (http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/))
Kolay gelsin
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 :)
Kafam karışmış. Şöyle olacak. Şununlarla home klasörünü alabilirsin
os.path.expanduser('~')
#ya da şu
os.environ['HOME']
Kolay gelsin