web-dev-qa-db-fra.com

Interruption du clavier en mode débogage PyCharm

Existe-t-il un moyen d'envoyer un événement d'interruption clavier dans PyCharm IDE (3.1) en mode débogage?

30
arbulgazar

Malheureusement, il n'existe aucun moyen simple de procéder. Vous devrez utiliser psutil et le module signal. Pour que cela fonctionne, vous devez installer psutil et la meilleure façon de le faire est via pip:

pip install psutil

Donc, disons que nous avons ici, pièce A:

while True:
    try:
        time.sleep(3)
        print "Zzzz"
        time.sleep(3)
        print("gong!")
    except KeyboardInterrupt as e:
        print "Closed by an Interrupt"
        break

Et vous exécutez cela dans PyCharm. Assurez-vous que l'interpréteur que vous utilisez a psutils installé. Tu peux vérifier:

enter image description here

Assurez-vous d'avoir correctement configuré votre interprète:

enter image description here

Si vous n'avez pas installé psutil, vous pouvez toujours le faire si le Install bouton.

Bon alors, maintenant que nous avons tout configuré, nous pouvons déboguer le programme:

enter image description here

Maintenant, tout ce que nous avons à faire est d'obtenir l'ID du processus, et nous pouvons l'obtenir au tout début du programme:

enter image description here

Alors, allumons notre console et envoyons un signal:

enter image description here

Et si cela fonctionnait correctement, vous devriez voir la fin de la boucle while:

enter image description here

Vous pouvez rationaliser davantage le processus en ajoutant une fonction pour envoyer une interruption dans le script de démarrage de votre console:

enter image description here

Une fois que vous avez terminé, il vous suffit d'appeler interrupt(<pid here>) pour appeler une interruption clavier sur votre processus.

J'espère que cela répond à votre question.

18
Games Brainiac

Le bouton PyCharm Stop envoie désormais SIGINT à la fois en mode débogage et en mode exécution. Si SIGINT ne met pas fin au programme, le bouton Stop change son signal en SIGKILL. Il change également son icône en forme de crâne:

See how the stop button changed its icon

12
milaniez

Il s'agit d'un bogue dans PyCharm. Voir: http://youtrack.jetbrains.com/issue/PY-484

L'interruption du clavier est un SIGINT. Sur les systèmes Unix, vous pouvez soit aller sur la ligne de commande et faire:

$ kill -INT <pid>

ou en python:

import os, signal
os.kill(<pid>,signal.SIGINT)
8
dvj

Comme mentionné dans ce commentaire - Pourquoi cela python interruption du clavier ne fonctionne-t-il pas? (Dans pycharm) :

Dans les versions récentes de PyCharm, vous pouvez activer Emulate terminal in output console dans votre configuration d'exécution - cela permet CtrlC dans la console Exécuter pour envoyer une interruption clavier.

Testé avec PyCharm 2018.3 (Community Edition):

enter image description here

Cela cassera également la bibliothèque tqdm :

enter image description here

2
Mr. Che

J'ai rencontré ce message lors de la recherche du suivi des bogues de Pycharm pour ce problème: https://youtrack.jetbrains.com/issue/PY-484

Si vous utilisez la version Pycharm 3, cela pourrait aider, cela a fonctionné pour moi.

Un des commentaires dans le tracker: `` J'ai découvert que Ctrl + C finit par arrêter le script en cours d'exécution, mais vous devez d'abord écrire une lettre dans la console pendant son exécution. Cliquez donc dans la fenêtre de la console, appuyez sur n'importe quelle touche, puis appuyez sur Ctrl-C. En d'autres termes, cela ressemble à un problème de mise au point du cadre GUI.

1
damaZhang