Maison  >  Article  >  développement back-end  >  Comment capter le signal SIGINT en Python ?

Comment capter le signal SIGINT en Python ?

PHPz
PHPzavant
2023-09-17 10:29:02966parcourir

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.

Modules requis

Module de signaux

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

Module système

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

Module Temps

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.

Mise en œuvre étape par étape

Étape 1 : Importer la bibliothèque

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

Étape 2 : Créer la fonction

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):

Étape 3 : Définir un gestionnaire personnalisé

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)

Étape 4 : Imprimer un message aléatoire

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')

Étape 5 : Régler l'heure de sommeil

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 .

Capturer SIGINT en Python

Algorithme (étapes)

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.

Exemple

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()

Sortie

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.

Conclusion

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer