Ekim 9

Lazarus’dan Python’a ulaşma TProcess

Merhabalar, bu yazıda size pythonda yazılmış ve gmail hesabındaki yeni mailleri gösteren bir programa lazarusdan ulaşıp sonuç olarak gösterilen mail sayısını edit kutusunun içerisine yazan bir program yazacağız. Bu programı yazmamızdaki amaç pascalın gmaildeki mail sayısını öğrenmede yetersiz olması değil pascalla diğer yazılımlar ya da programlama dilleri arasında iletişim kurmayı sağlamak. Bunun için geliştirilen yöntemler var doğru DLL, DDE, OLE gibi yöntemler bu ihtiyaçtan kaynaklanıp geliştirildi. Ama bu yöntemlerin hepsinde diğer programı yazan kişinin size bu tür bir imkanı sunması gerekir yani dos tabanlı, parametrelerle çalışan  bir program bu yöntemlerin hiçbirine cevap vermeyecektir.

İşte Tprocess bu tür bir ihtiyacı karşılamak için biçilmiş kaftan (başka yöntemlerde var ama Tprocess hem windows’da hem linux’da çalışabiliyor)

Öncelikle pythonda yazacak olduğumuz programın kodunu vereyim.


#!/usr/bin/python

import imaplib
import re
import sys
obj = imaplib.IMAP4_SSL('imap.gmail.com','993')
obj.login(sys.argv[1],sys.argv[2])
unreadCount = re.search("UNSEEN (\d+)", obj.status("INBOX", "(UNSEEN)")[1][0]).group(1)
print unreadCount

Bu programı herhangi bir metin editöründe yazıp, lazarusda yazacağımız programın bulunduğu klasöre gmail.py olarak kayıtediyoruz.

Arından lazarusda hazırladığımız bir forma 3 adet metin kutusu ve bir adet buton yerleştiriyoruz.

python, gmail, lazarus, pascal

Ve butona ;

procedure TForm1.Button1Click(Sender: TObject);
var python:TProcess;
  cikti:TStringList;

begin
python:=TProcess.Create(nil);
cikti := TStringList.Create;
python.Options:=python.Options+[poWaitOnExit,poUsePipes,poNoConsole];
python.CommandLine:= 'c:\python27\python.exe  gmail.py '+edit1.text+' '+edit2.text;
python.Execute;
cikti.LoadFromStream(python.Output);
edit3.Text:=cikti.Strings[0];
cikti.free;
python.free;
end;

Kodunu yazıyoruz. Kod aslında gayet anlaşılır, processi çalıştıracak bir tprocess bileşenimiz var ve bu bileşen python adında ve ardından da çıktıları kayıt edecek bir Tstringlist tipinde değişkenimiz var.  Önce bu değişkenleri create ediyoruz. Ardından processin kapanmaya kadar beklemesini, pipes kullanmasını ve pencere açılmasını istemediğimizi belirtiyoruz ve processe komut satırını tanımlayıp execute ile process’i çalıştırıyoruz.

Burada dikkat edilmesi gereken gmail.py programına argüman olarak edit1 ve edit2 deki kullanıcı adı ve şifreyi bu kod ile aktarmış olduğumuz.

Process’i çalıştırma işleminden sonra çıktının ilk satırının sonucunu edit3’e yazdırıyoruz, ilk satır olmasının nedeni programın tek satırlık bir sonuç verecek olması, başka bir programda stringlistin tamamını kullanmak gerekebilir ve belki öyle bir programda edit kutusu değil memo bileşeni daha uygun olacaktır.

En son olarakda oluşturduğumuz bileşenleri özgür bırakıyoruz.

Gördüğünüz gibi basit bir işlemle pythonda yazılan bir programa erişip bilgi çektik. Ama Tprocess bu kadar basit bir yapı değil daha burada anlatılmayan ve belki ilerki yazılarda anlatılacak olan pek çok özelliği bulunmakta.

 

 

 

 

 

 

Did you like this? Share it:

Etiketler:, , , ,

Posted 09 Ekim 2011 by admin in category Lazarus, Programlama, Python

1 thoughts on “Lazarus’dan Python’a ulaşma TProcess

  1. Kerem Danış

    Selam;

    Çok güzel anlatmışsın.
    Bir yerde
    //
    unit1.pas(39,20) Error: Identifier not found “TProcess”
    unit1.pas(39,20) Error: Error in type definition
    //

    şeklinde bir hata alırsanız Uses satırına “Process” eklemeniz gerekmektedir.
    Yani
    //Uses
    Classes, SysUtils, Process, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
    //
    Şeklinde olmalı.

    Eline sağlık.

    Reply

Leave a Comment

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*