2015-10-12 11 views
7

हाय मेरे पास पाइथन में एक स्क्रिप्ट है जो अनंत लूप में कुछ क्रियाएं चलाती है, लेकिन कभी-कभी मुझे स्क्रिप्ट को बंद करना होता है और इसे एक नए संस्करण के साथ अपडेट करना होता है, सर्वर में कुछ काम करता है, आदिकरीबी पायथन लिपि से पहले क्रियाएं

सवाल है, मैं कैसे स्क्रिप्ट को रोकने के लिए क्या कर सकते हैं और करीब यह पहले, स्क्रिप्ट बनाने है पाश के रूप में करीब SQLite कनेक्शन, एक दलाल के साथ घनिष्ठ संबंध, आदि के बाद कुछ कार्रवाई

मैं अब क्या करना है सीटीआर + सी जब तक यह बंद न हो जाए (इसे समाप्त होने से पहले कुछ बार लें) और उसके बाद मैन्युअल रूप से स्क्लाइट कनेक्शन बंद करें,

+2

आप एक [संदर्भ प्रबंधक] (https://www.python.org/dev/peps/pep-0343/) का उपयोग कर सकते हैं और '__exit__' में व्यवस्थित हो सकते हैं, या 'कीबोर्ड इंटरप्ट को छोड़कर' या 'अंत में' एक 'कोशिश' पर। – jonrsharpe

उत्तर

7

आप एक संकेत प्राप्त कर सकते हैं प्यारा कुछ अन्य तो sys.exit

import signal 
import sys 

def signal_handler(signal, frame): 
    print 'You pressed Ctrl+C - or killed me with -2' 
    #.... Put your logic here ..... 
    sys.exit(0) 

signal.signal(signal.SIGINT, signal_handler) 
+0

यह मेरे लिए सही काम करता है। टर्मिनल बंद होने पर भी पकड़ने की कोई संभावना है? –

+0

आपको 'SIGHUP' सिग्नल को अपनाना पड़ सकता है - यह मूल रूप से सिग्नल जो टर्मिनल डिस्कनेक्ट होने पर प्रक्रियाओं को भेजा जाता है। – Vor

0

आप अपने पाश के आसपास एक try-except ब्लॉक का उपयोग करें और KeyboardInterrupt अपवाद पकड़ सकते थे। या finally ब्लॉक को व्यवस्थित तरीके से समाप्त होने पर भी साफ करने के लिए ब्लॉक करें। आपका कोड तो कुछ इस तरह दिखना चाहिए:

try: 
    <your loop goes here> 
except KeyboardInterrupt: 
    <handle error and do possible special cleanup> 
finally: 
    <do the cleanup that always has to happen> 

ध्यान दें कि इस तरह से आप केवल मामले को संभाल जब आप एक कुंजीपटल बाधा और कोई अन्य मामले के साथ अपनी स्क्रिप्ट मार डालते हैं।

तुम भी with बयान see here for more info (टिप्पणी में उल्लेख किया) का इस्तेमाल किया जा सकता था

0
import sys 
try: 
    # Program here 
except KeyboardInterrupt: 
    # Close connections 
    sys.exit(0) 
+1

कृपया अपना कोड संपादित करने के बारे में अधिक स्पष्टीकरण जोड़ने के लिए अपनी पोस्ट को संपादित करने पर विचार करें और यह समस्या का समाधान क्यों करेगा। एक उत्तर जिसमें ज्यादातर कोड शामिल होते हैं (भले ही यह काम कर रहा हो) आमतौर पर ओपी को उनकी समस्या को समझने में मदद नहीं करेगा। – SuperBiasedMan

2

आप atexit मॉड्यूल इस्तेमाल कर सकते हैं:

import atexit 

def cleanup(): 
    print "cleanup" 
    # close connections, ... 

atexit.register(cleanup) 

cleanup() समारोह हर सामान्य समाप्ति पर बुलाया जाएगा (इसमें Ctrl-C शामिल है)।

संबंधित मुद्दे