Maison > Article > développement back-end > Comment capter le signal SIGINT en Python ?
Dans cet article, nous apprendrons comment attraper SIGINT en Python et ce que vous devez faire après l'avoir attrapé.
Après avoir reçu le signal, le module de signal effectuera certaines actions. En plus de cela, il peut également capturer les interruptions utilisateur via le clavier à l'aide de SIGINT.
Le terme « signal » fait référence au processus par lequel un programme peut recevoir des informations du système d'exploitation. De plus, des signaux sont envoyés aux programmes lorsque le système d'exploitation détecte des événements spécifiques. Le module de signal peut être installé en exécutant la commande suivante dans le terminal -
pip install signal
Le module sys de Python fournit plusieurs fonctions et variables pour modifier différentes parties de l'environnement d'exécution Python. Le module sys peut être installé à l'aide de la commande suivante -
pip install os-sys
Le module de temps de Python permet aux utilisateurs de manipuler le temps et d'enregistrer des informations sur le temps. Le module time est généralement préinstallé avec Python, il n'a donc pas besoin d'être installé, mais sinon, vous pouvez l'installer à l'aide de la commande ci-dessous -
;pip install python-time
Présentons étape par étape l'implémentation de la capture de SIGINT en Python.
Tout d'abord, nous devons importer toutes les bibliothèques requises à l'aide du mot-clé import. Les bibliothèques signal, sys et sleep en font partie.
# importing signal and sys modules import signal import sys # importing sleep function from the time module from time import sleep
Nous créons maintenant une fonction qui sera appelée en cas d'interruption du clavier en acceptant deux arguments quelconques. Dans ce cas, les paramètres sont considérés sig et frame.
# creating a function that accepts the two arguments # it is called when the user makes a keyboard interruption def signalHandling(signal, frame):
Ici, nous utilisons la fonction signal.signal() pour définir un gestionnaire personnalisé qui doit être appelé lorsque le signal est reçu. De plus, nous définissons signal.SIGINT, qui provoque une interruption en tapant Ctrl+C ou Ctrl+F2 sur le clavier.
signal.signal(signal.SIGINT, signalHandling)
Ensuite, imprimez quelques lignes d'un message aléatoire pour indiquer à l'utilisateur quoi faire si le clavier est interrompu.
# printing random message print(' printing random messages')
Enfin, définissez le temps de veille Python sur un nombre aléatoire de secondes.
# sleep time sleep(time in sec)
Attention
Il y a un problème avec ce programme : si vous l'exécutez sous Windows, vous pouvez l'arrêter et attraper SIGINT en appuyant sur Ctrl et F2, mais si vous l'exécutez sous Linux, vous pouvez l'arrêter en appuyant simultanément sur Ctrl et C .
Vous trouverez ci-dessous les algorithmes/étapes qui doivent être suivis pour effectuer la tâche requise. -
Utilisez le mot-clé import pour importer les modules signal et sys.
Utilisez le mot-clé import pour importer la fonction sleep depuis le module time.
Créez une variable et initialisez sa valeur à 1 (utilisée pour représenter le nombre d'exécutions de boucle).
Utilisez while True pour boucler à l'infini.
Utilisez le bloc try-sauf pour gérer les erreurs/exceptions.
Imprimez le nombre d'exécutions de boucle en imprimant la variable ci-dessus.
Utilisez la fonction sleep() en lui passant un nombre comme argument pour dormir pendant un nombre aléatoire de secondes entre l'impression de chaque nombre.
Ajoutez 1 au nombre d’exécutions de boucle.
Utilisez le bloc except pour gérer les exceptions d'interruption du clavier.
Imprimez n'importe quel message si une exception d'interruption du clavier se produit.
Utilisez la fonction exit() du module sys pour fermer/quitter le programme.
Le programme suivant utilise try/catch pour intercepter les exceptions SIGINT -
# 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()
Une fois exécuté, le programme ci-dessus générera le résultat suivant -
1 2 3 4 5 6 7 8 9 10 11 12 13 The loop has stopped!!
Dans ce programme, nous utilisons l'instruction try-catch pour gérer les exceptions clavier. Lors de l'exécution de la boucle d'incrémentation de nombre dans le bloc try, nous avons détecté l'interruption du clavier dans le bloc catch.
Dans cet article, nous avons appris comment capturer SIGINT à l'aide de Python. Nous avons appris à utiliser les instructions try/catch pour atteindre le même objectif. Les instructions Try and Catch peuvent être utilisées pour gérer des exceptions telles que la division par 0 et les interruptions clavier.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!