2010-10-03 23 views
49

Programdan çıkmadan önce nasıl bir işleve sahip olacaksınız? Sürekli olarak arka planda çalışacak bir komut dosyası var ve çıkmadan önce bir dosyaya bazı verileri kaydetmem gerekiyor. Bunu yapmanın standart bir yolu var mı? atexit modül üzerindenProgram çıkışından önce bir şey yapmak

+1

Komut dosyasını nasıl durdurursunuz? – phimuemue

+1

Komut dosyası hiç durmamalı, ama belki de birisi işlemi sonlandırır veya Ctrl + \ veya bir şeyleri basar. – RacecaR

cevap

77

Kontrol:

Örneğin

http://docs.python.org/library/atexit.html

Bir mesaj yazdırmak istiyorsa, başvurum sonlandırma edildi:

import atexit 

def exit_handler(): 
    print 'My application is ending!' 

atexit.register(exit_handler) 

Sadece bu büyük çalışır unutmayın betiğin normal olarak sonlandırılması, ancak tüm durumlarda (örneğin ölümcül dahili hatalar) çağrılmayacaktır.

+2

Ctrl + C veya Ctrl + \ tuşlarına basarsanız, nerede çağrılacağının bir yolu var mı? – RacecaR

+5

Ctrl + C tuşlarına basarsanız çağrılır. Bu sadece bir KeyboardInterrupt istisnasını yükseltir. –

+1

Oh, bunu unuttum. Ve eğer birileri python sürecini doğru bir şekilde öldürürse yapabileceğiniz hiçbir şeyin işe yaramayacağını farz ediyorum. – RacecaR

6

Komut dosyasını bir KeyboardInterrupt (örneğin Ctrl-C tuşlarına basarak) yükselterek durdurursanız, bunu standart bir istisna olarak yakalayabilirsiniz. SystemExit'u da aynı şekilde yakalayabilirsiniz.

try: 
    ... 
except KeyboardInterrupt: 
    # clean up 
    raise 

Bunu bildiğim kadarıyla; Bunu yapmanın 'doğru' yolu, yukarıda belirtilen atexit modülüdür. Nihayet:

16

Eğer bir şey her zaman denemek, hatta hataları üzerinde, çalıştırmak kullanmak istiyorsanız böyle - Ayrıca özel durumları işlemek istiyorsanız

def main(): 
    try: 
     execute_app() 
    finally: 
     handle_cleanup() 

if __name__=='__main__': 
    main() 

sen hariç bir ekleyebilirsiniz: nihayet önce:

+3

SIGTERM, işlemin öldürülmesinden kaynaklandığında işe yaramıyor. – ramu

İlgili konular