İPUCU

Python Artificial Intelligence’da en çok kullanılan dildir ve gerekli dökümanların paylaşım alanlar burada paylaşılmaktadır.

Seçenekler

Python atexit modulü kullanımı/THT-ArGe Kulübü

Hacknology - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
10/2015
Nereden:
rm -rf /
Mesajlar:
2.710
Konular:
151
Teşekkür (Etti):
947
Teşekkür (Aldı):
1235
Ticaret:
(0) %
15-03-2017 22:23
#1
Python atexit modulü kullanımı/THT-ArGe Kulübü
Merhabalar, ben hacknology. Uzun zamandır bir Python yazısı yazmamıştık. Ben de yararlı olacağını düşündüğüm bir kütüphane kullanımı yazmak istedim. Atexit..
ÖNEMLİ! Temel Python bilgisine sahip olduğunuz farz edilerek yazılmıştır
Atexit mantığının temelinde bir program kapanırken yapılacağı işlemleri bir listeye ekleyip bunları çalıştırır.

.register:
Senaryoya göre elimizde bir program olsun, bu program işlemi bitirince biz bir işlem yapmasını istiyoruz. Örnek kodlarımız şu şekilde olsun

Kod:
import atexit
print("Merhaba")
def sonlandir():
    print("Son ayarlar yapılıyor...")
atexit.register(sonlandir)
0x00

Şimdi biz burada program kapanırken "son ayarlar yapılıyor" demesini istedik ve bunu da register ile sağladık. Register kabaca bir "kapanırken yapılacaklar listesi" oluşturur ve bunu çalıştırır. Çalıştıralım

Kod:
root@kali:~/Masaüstü# python3 son.py
Merhaba
Son ayarlar yapılıyor..
0x01

Gördüğünüz gibi kali terminal'i gayet rahat çalıştırdı programı. Bir de IDE üzerinden deneyelim
Kod:
Merhaba
>>>
0x02

Gördüğümüz gibi çıkışta yapılacağı işlemi çalıştırmadı. Bu durumda yardımımıza "atexit._run_exitfuncs()" koşuyor...

._run_exitfuncs:

Adından da anlaşılacağı gibi çıkışta yapılacak fonksiyon listesini çalıştırır. Örnek bir kodlama ile gösterirsek...
Kod:
import atexit
print("Merhaba")
def sonlandir():
    print("Son ayarlar yapılıyor...")
atexit.register(sonlandir)
atexit._run_exitfuncs()
0x03

Tabii ki biz kullandığımızda programımız bu kadar basit olmayacak. Mesela parametreli kullanmamız gerekecek. Bunun için önce bir liste oluşturup parametre öğelerini o listeye eklememiz gereklidir. Örnek olarak:
Kod:
import atexit
print("Merhaba")
a = []
def bitir(isim,soyisim):
    parms = (isim, soyisim)
    print("Temizlik yapildi")
    print("coder: {} aka: {}".format(*parms))
while 1:
    s = input(">>> ")
    if s == "exit":
        break
    else:
        a.append(s)
atexit.register(bitir, a[0], a[1])
atexit._run_exitfuncs()
0x04
Çalıştıralım...

Kod:
Merhaba
>>> hackno
>>> utku
>>> exit
Temizlik yapildi
coder: hackno aka: utku
>>>
0x05


.unregister:

Bazen koşula göre eklediğimiz işlemi silmemiz gerekebilir. Bu durumlarda "unregister()" den faydalanırız.

Register'in yaptığı işlemin tam tersini yapar. İki adet finish fonksiyonu üzerinden örneklendirelim

Kod:
import atexit
print("Merhaba")
a = []
def bitir():
    print("Bitti!")
def bitir2():
    print("Nereye gidiyorsun?")
atexit.register(bitir)
atexit.register(bitir2)

soru = int(input("1 mi 2 mi: "))
if soru == 1:
    atexit.unregister(bitir2)
elif soru == 2:
    atexit.unregister(bitir)
atexit._run_exitfuncs()
0x06

Bunun çıktısı ise beklendiği üzere:
Kod:
Merhaba
1 mi 2 mi: 1
Bitti!
>>>
0x07


Ne zaman çalışmaz?

Python'ın tespit edemediği bir şekilde kapandığında veya benzeri bir durum oluştuğunda çalışmaz. Şimdi CTRL+C Kısayolu ile kapatmayı deneyelim

Kod:
Merhaba
1 mi 2 mi: 
Traceback (most recent call last):
  File "C:\Users\Utku\AppData\Local\Programs\Python\Python35\bittiginde.py", line 11, in <module>
    soru = int(input("1 mi 2 mi: "))
  File "C:\Users\Utku\AppData\Local\Programs\Python\Python35\lib\idlelib\PyShell.py", line 1386, in readline
    line = self._line_buffer or self.shell.readline()
KeyboardInterrupt
>>>
0x08

Başka bir güzel özelliği ise, oldukça sade yazılmış bir kütüphane olması. Kaynak kodlarına göz atacak olursak

Kod:
"""
atexit.py - allow programmer to define multiple exit functions to be executed
upon normal program termination.

One public function, register, is defined.
"""

__all__ = ["register"]

import sys

_exithandlers = []
def _run_exitfuncs():
    """run any registered exit functions

    _exithandlers is traversed in reverse order so functions are executed
    last in, first out.
    """

    exc_info = None
    while _exithandlers:
        func, targs, kargs = _exithandlers.pop()
        try:
            func(*targs, **kargs)
        except SystemExit:
            exc_info = sys.exc_info()
        except:
            import traceback
            print >> sys.stderr, "Error in atexit._run_exitfuncs:"
            traceback.print_exc()
            exc_info = sys.exc_info()

    if exc_info is not None:
        raise exc_info[0], exc_info[1], exc_info[2]


def register(func, *targs, **kargs):
    """register a function to be executed upon normal program termination

    func - function to be called at exit
    targs - optional arguments to pass to func
    kargs - optional keyword arguments to pass to func

    func is returned to facilitate usage as a decorator.
    """
    _exithandlers.append((func, targs, kargs))
    return func

if hasattr(sys, "exitfunc"):
    # Assume it's another registered exit function - append it to our list
    register(sys.exitfunc)
sys.exitfunc = _run_exitfuncs

if __name__ == "__main__":
    def x1():
        print "running x1"
    def x2(n):
        print "running x2(%r)" % (n,)
    def x3(n, kwd=None):
        print "running x3(%r, kwd=%r)" % (n, kwd)

    register(x1)
    register(x2, 12)
    register(x3, 5, "bar")
    register(x3, "no kwd args")
0x09

İsterseniz başka bir yazımızda da kaynak kodlarını inceleriz. Şimdilik sağlıcakla kalın



---------------------
I surrender my soul
Odin hear my call

flag{Bur4si_b1r_0yun_park1}

hacknology@hacknologyroot:~/
Konu Hacknology tarafından (15-03-2017 22:30 Saat 22:30 ) değiştirilmiştir.
siberdrone15, Folyx, CyberNeeG, Vysion1453 Teşekkür etti.
Hacknology - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
10/2015
Nereden:
rm -rf /
Mesajlar:
2.710
Konular:
151
Teşekkür (Etti):
947
Teşekkür (Aldı):
1235
Ticaret:
(0) %
16-03-2017 07:14
#2
Sabite alınmış. Günceldir, beyler sizin için emek veriyoruz
---------------------
I surrender my soul
Odin hear my call

flag{Bur4si_b1r_0yun_park1}

hacknology@hacknologyroot:~/
Folyx - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
03/2017
Mesajlar:
1.963
Konular:
97
Teşekkür (Etti):
205
Teşekkür (Aldı):
163
Ticaret:
(0) %
22-05-2017 22:17
#3
Eline Sağlık Hocam //GÜNCEL
CyberNeeG - ait Kullanıcı Resmi (Avatar)
Tamamen Forumdan Uzaklaştırıldı
Üyelik tarihi:
01/2016
Nereden:
777
Mesajlar:
1.158
Konular:
48
Teşekkür (Etti):
169
Teşekkür (Aldı):
156
Ticaret:
(0) %
08-06-2017 17:31
#4
Elinize sağlık //güncel
Kingof1453 - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
09/2015
Nereden:
Bilinmiyor.
Mesajlar:
950
Konular:
95
Teşekkür (Etti):
149
Teşekkür (Aldı):
195
Ticaret:
(0) %
08-06-2017 17:31
#5
Ellerine sağlık
---------------------
Eğer bir insan hedefsiz olursa hayattan bir umududa yotur...
Ben Hacker Değilim Sadece Bir Defacerim..



qRunt11 - ait Kullanıcı Resmi (Avatar)
Tamamen Forumdan Uzaklaştırıldı
Üyelik tarihi:
03/2017
Mesajlar:
705
Konular:
31
Teşekkür (Etti):
8
Teşekkür (Aldı):
199
Ticaret:
(0) %
08-06-2017 17:32
#6
0x... kimse hatırlamaz. {: Eline sağlık
Hacknology - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
10/2015
Nereden:
rm -rf /
Mesajlar:
2.710
Konular:
151
Teşekkür (Etti):
947
Teşekkür (Aldı):
1235
Ticaret:
(0) %
08-06-2017 23:19
#7
Alıntı:
qRunt11´isimli üyeden Alıntı Mesajı göster
0x... kimse hatırlamaz. {: Eline sağlık
Ölmedik daha (:
Alıntı:
Bade Perest´isimli üyeden Alıntı Mesajı göster
Baya guzel.
Alıntı:
Bade Perest´isimli üyeden Alıntı Mesajı göster
Emegine sagliik.
Teşekkürler herkese
---------------------
I surrender my soul
Odin hear my call

flag{Bur4si_b1r_0yun_park1}

hacknology@hacknologyroot:~/
osm4nl1evl4d1 - ait Kullanıcı Resmi (Avatar)
Tamamen Forumdan Uzaklaştırıldı
Üyelik tarihi:
03/2017
Nereden:
T Ü R K
Mesajlar:
4.255
Konular:
194
Teşekkür (Etti):
791
Teşekkür (Aldı):
1005
Ticaret:
(0) %
08-06-2017 23:21
#8
Pythona yeni başladım.
Vysion1453 - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
03/2016
Nereden:
of Darkness.
Mesajlar:
357
Konular:
9
Teşekkür (Etti):
114
Teşekkür (Aldı):
66
Ticaret:
(0) %
08-06-2017 23:22
#9
Eline sağlık dostum
+99 güncel

buarada odin oğullarına selamlar
---------------------
R6v9Bq8fsPM
Hacknology - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
10/2015
Nereden:
rm -rf /
Mesajlar:
2.710
Konular:
151
Teşekkür (Etti):
947
Teşekkür (Aldı):
1235
Ticaret:
(0) %
08-06-2017 23:51
#10
Alıntı:
Vysion1453´isimli üyeden Alıntı Mesajı göster
Eline sağlık dostum
+99 güncel

buarada odin oğullarına selamlar
Bin selam! Teşekkürler
---------------------
I surrender my soul
Odin hear my call

flag{Bur4si_b1r_0yun_park1}

hacknology@hacknologyroot:~/

Bookmarks


« Önceki Konu | Sonraki Konu »
Seçenekler

Yetkileriniz
Sizin Yeni Konu Acma Yetkiniz var yok
You may not post replies
Sizin eklenti yükleme yetkiniz yok
You may not edit your posts

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodları Kapalı
Trackbacks are Kapalı
Pingbacks are Kapalı
Refbacks are Kapalı