मेरे पास एक छोटी सी स्क्रिप्ट है इंटरप्टेब्लोपोफ़ॉर्म जो एक अंतराल पर कोड चलाता है (डिफ़ॉल्ट 1sec), यह स्क्रीन पर एक संदेश को चलाता है जबकि यह चल रहा है, और एक बाधा सिग्नल को फंसाता है जिसे आप CTL-C के साथ भेज सकते हैं:
from interruptableLoop import InterruptableLoop
loop=InterruptableLoop(intervalSecs=1)
while loop.ShouldContinue():
pass
जब आप स्क्रिप्ट चलाते हैं और फिर उसे बाधित करते हैं तो आप यह आउटपुट देखते हैं, (पीरियड्स लूप के हर पास पर पंप करते हैं):
[py36]$ ./interruptexample.py
CTL-C to stop (or $kill -s SIGINT pid)
......^C
Exiting at 2018-07-28 14:58:40.359331
interruptableLoop.py :
"""
Use to create a permanent loop that can be stopped ...
... from same terminal where process was started and is running in foreground:
CTL-C
... from same user account but through a different terminal
$ kill -2 <pid>
or $ kill -s SIGINT <pid>
"""
import signal
import time
from datetime import datetime as dtt
__all__=["InterruptableLoop",]
class InterruptableLoop:
def __init__(self,intervalSecs=1,printStatus=True):
self.intervalSecs=intervalSecs
self.shouldContinue=True
self.printStatus=printStatus
self.interrupted=False
if self.printStatus:
print ("CTL-C to stop\t(or $kill -s SIGINT pid)")
signal.signal(signal.SIGINT, self._StopRunning)
signal.signal(signal.SIGQUIT, self._Abort)
signal.signal(signal.SIGTERM, self._Abort)
def _StopRunning(self, signal, frame):
self.shouldContinue = False
def _Abort(self, signal, frame):
raise
def ShouldContinue(self):
time.sleep(self.intervalSecs)
if self.shouldContinue and self.printStatus:
print( ".",end="",flush=True)
elif not self.shouldContinue and self.printStatus:
print ("Exiting at ",dtt.now())
return self.shouldContinue
time.sleep(5)
, जब तक आपके पासwhile True:
लाइन के नीचे कुछ कोड इंडेंट है (यह सिर्फpass
एक न्यूनतम पर हो सकता है )