In diesem Artikel erfahren Sie, wie Sie SIGINT in Python abfangen und was Sie nach dem Abfangen tun müssen.
Nach dem Empfang des Signals führt das Signalmodul bestimmte Aktionen aus. Darüber hinaus können mit SIGINT auch Benutzerunterbrechungen über die Tastatur erfasst werden.
Der Begriff „Signal“ bezieht sich auf den Vorgang, durch den ein Programm Informationen vom Betriebssystem empfangen kann. Darüber hinaus werden Signale an Programme gesendet, wenn das Betriebssystem bestimmte Ereignisse erkennt. Das Signalmodul kann installiert werden, indem der folgende Befehl im Terminal ausgeführt wird -
pip install signal
Das sys-Modul in Python bietet mehrere Funktionen und Variablen, um verschiedene Teile der Python-Laufumgebung zu ändern. Das sys-Modul kann mit dem folgenden Befehl installiert werden -
pip install os-sys
Das Zeitmodul von Python ermöglicht es Benutzern, die Zeit zu manipulieren und Informationen über die Zeit aufzuzeichnen. Das Zeitmodul ist normalerweise mit Python vorinstalliert, sodass es nicht installiert werden muss. Wenn nicht, können Sie es mit dem folgenden Befehl installieren -
pip install python-time
Lassen Sie uns Schritt für Schritt die Implementierung der SIGINT-Erfassung in Python vorstellen.
Zuerst müssen wir alle erforderlichen Bibliotheken mit dem Schlüsselwort import importieren. Dazu gehören die Signal-, Sys- und Sleep-Bibliotheken.
# importing signal and sys modules import signal import sys # importing sleep function from the time module from time import sleep
Wir erstellen nun eine Funktion, die im Falle einer Tastaturunterbrechung aufgerufen wird, indem wir zwei beliebige Parameter akzeptieren. In diesem Fall werden die Parameter sig und frame berücksichtigt.
# creating a function that accepts the two arguments # it is called when the user makes a keyboard interruption def signalHandling(signal, frame):
Hier verwenden wir die Funktion signal.signal(), um einen benutzerdefinierten Handler zu definieren, der aufgerufen werden muss, wenn das Signal empfangen wird. Zusätzlich definieren wir signal.SIGINT, das durch Eingabe von Strg+C oder Strg+F2 auf der Tastatur einen Interrupt auslöst.
signal.signal(signal.SIGINT, signalHandling)
Drucken Sie als Nächstes einige Zeilen einer zufälligen Nachricht aus, um dem Benutzer mitzuteilen, was zu tun ist, wenn die Tastatur unterbrochen wird.
# printing random message print(' printing random messages')
Stellen Sie abschließend die Python-Ruhezeit auf eine zufällige Anzahl von Sekunden ein.
# sleep time sleep(time in sec)
Achtung
Es gibt ein Problem mit diesem Programm: Wenn Sie es unter Windows ausführen, können Sie es stoppen und SIGINT abfangen, indem Sie Strg und F2 drücken. Wenn Sie es jedoch unter Linux ausführen, können Sie es stoppen, indem Sie gleichzeitig Strg und C drücken .
Unten sind die Algorithmen/Schritte aufgeführt, die befolgt werden müssen, um die erforderliche Aufgabe auszuführen. -
Verwenden Sie das Schlüsselwort import, um die Module signal und sys zu importieren.
Verwenden Sie das Schlüsselwort import, um die Funktion sleep aus dem Zeitmodul zu importieren.
Erstellen Sie eine Variable und initialisieren Sie ihren Wert auf 1 (wird zur Darstellung der Anzahl der Schleifenausführungen verwendet).
Verwenden Sie while True für eine Endlosschleife.
Verwenden Sie den Try-Except-Block, um Fehler/Ausnahmen zu behandeln.
Drucken Sie die Anzahl der Schleifenausführungen, indem Sie die obige Variable drucken.
Verwenden Sie die Funktion sleep(), indem Sie ihr eine Zahl als Argument übergeben, um zwischen dem Drucken jeder Zahl eine zufällige Anzahl von Sekunden lang zu schlafen.
Füge 1 zur Anzahl der Schleifenausführungen hinzu.
Verwenden Sie den Block exclusive, um Tastaturunterbrechungsausnahmen zu behandeln.
Drucken Sie eine beliebige Meldung aus, wenn eine Tastaturunterbrechungsausnahme auftritt.
Verwenden Sie die Funktion exit() des sys-Moduls, um das Programm zu schließen/beenden.
Das folgende Programm verwendet try/catch, um SIGINT-Ausnahmen abzufangen -
# importing signal and sys modules import signal import sys # importing sleep function from the time module from time import sleep # initializing variable with value 1 to count the number of times the loop is executed k = 1 # looping infinite times using a while loop while True: # using try-except blocks for handling errors/exceptions try: # Printing the count of the number of times the loop is executed print(k) #sleeping for a random number of seconds time between printing of a number sleep(0.5) # Incrementing the loop execution count by 1 k += 1 # Handling the keyboard interruption exception using except block except KeyboardInterrupt: # printing any message if keyboard interruption exception occurs print("The loop has stopped!!") # closing/exiting the program sys.exit()
Bei der Ausführung generiert das obige Programm die folgende Ausgabe:
1 2 3 4 5 6 7 8 9 10 11 12 13 The loop has stopped!!
In diesem Programm verwenden wir die Try-Catch-Anweisung, um Tastaturausnahmen zu behandeln. Beim Ausführen der Zahlenerhöhungsschleife im Try-Block haben wir den Tastatur-Interrupt im Catch-Block abgefangen.
In diesem Artikel haben wir gelernt, wie man SIGINT mit Python erfasst. Wir haben gelernt, wie man Try/Catch-Anweisungen verwendet, um denselben Zweck zu erreichen. Mit Try- und Catch-Anweisungen können Ausnahmen wie Division durch 0 und Tastaturunterbrechungen behandelt werden.
Das obige ist der detaillierte Inhalt vonWie fängt man das SIGINT-Signal in Python ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!