Krutzo 1
Krutzo
shrpnl 1
shrpnl
Best Studio 1
Best Studio
D 1
delimuratt
Aliyldrim 1
Aliyldrim
Mt2Hizmet 1
Mt2Hizmet
noisiv 1
noisiv
Manwe Work 1
Manwe Work
melankolıa18 1
melankolıa18
Agora Metin2 1
Agora Metin2
Cannn6161 1
Cannn6161
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

Python atexit modulü kullanımı

  • Konuyu başlatan Konuyu başlatan S3MB0L
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 6
  • Görüntüleme Görüntüleme 978

S3MB0L

𝖎𝖇𝖗𝖆𝖍𝖎𝖒
Telefon Numarası Onaylanmış Üye
TM Üye
Katılım
1 Eyl 2018
Konular
126
Mesajlar
435
Çözüm
3
Online süresi
21d 12h
Reaksiyon Skoru
192
Altın Konu
13
Başarım Puanı
139
Yaş
32
MmoLira
1,976
DevLira
0
Ticaret - 0%
0   0   0

ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!

Merhabalar, ben S3MB0L. 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
 
Son düzenleme:
Paylaşım için teşekkürler
 
Paylasım İçin Teşekkürler.
 
gayet sağlam paylaşımlar için teşekürler devamlılığını istiyoruz
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst