10
votes

Python: signal / interruptions de clavier intégré

Je dois actuellement fournir plusieurs interruptions de clavier pour un programme. Y a-t-il un moyen facile de le faire avec la classe de signaux? J'utilise actuellement le sigint / Ctrl + C mais je ne trouve pas d'autres mappages de clavier.

serait agréable d'avoir plus de 2 signaux. Comment puis-je définir plus de signaux ou existe-t-il un meilleur moyen de capturer une "interruption à partir d'un utilisateur"?

Voici une vue de niveau supérieur du code actuel: xxx


2 commentaires

sur quelle plate-forme? Le support de signal sur Windows manque beaucoup de signaux ...


Si vous souhaitez réagir à l'entrée du clavier, utilisez le code du clavier réel.


3 Réponses :


7
votes

sur les systèmes Linux, Ctrl + \ générera un signal Signal.Sigquit.


1 commentaires

Y a-t-il un moyen de définir de nouveaux? Ou plus?



0
votes

Je ne sais pas s'il y a une manière prémélangée pour définir de nouveaux signaux et cartographier-les des événements de clavier.

Si vous avez besoin de cette sorte de flexibilité, vous devrez peut-être utiliser un fil d'interface qui reste au premier plan et écoute les événements de clavier. Il pourrait ensuite communiquer avec d'autres threads de toutes les sortes que vous aimez.


0 commentaires

11
votes

Le Ctrl + \ Code> qui a été mentionné est interprété par votre logiciel de terminal et la liaison de clé est configurée via stté code>. Sauf si vous avez un moyen de personnaliser votre logiciel de terminal, vous ne pourrez utiliser que quelques signaux déjà intégrés.

Selon la quantité de fonctionnalité dont vous avez besoin ou à quelle distance vous souhaitez le prendre, une autre option est de Écrivez votre propre "terminal d'exécution de processus" simple. Ce serait un script qui exécute une application pour vous et place votre borne en mode RAW afin qu'il puisse traiter les frappes de frappe qui effectuent des actions personnalisées. P>

ci-dessous est un exemple simplifié montrant ce que je veux dire. Vous pouvez également faire quelque chose de similaire via malédiction ou URWID si vous le souhaitez. p>

Pour gérer la sortie de processus, vous devez capturer le stdout / stdeur code> de et l'afficher bien à l'écran, en utilisant séquences d'échappement ANSI Si vous manipulez le terminal manuellement ou à l'aide d'un widget Urwid pour afficher la sortie dans une fenêtre de défilement, etc. La même idée pourrait également étendre à d'autres systèmes d'interface graphique (WX, Tkinter, etc.) mais le contrôle des terminaux a été mentionné. P>

voici term.py code> qui implémente un interprète terminal brut de base: P>

% python term.py python target.py
you entered 'h'
you entered 'i'
you entered '\x1c'
                  got: SIGQUIT
you entered '\x15'
                  got: SIGUSR1
you entered '\x08'
                  got: SIGHUP
you entered '\t'
                got: SIGINT
you entered 'q'


0 commentaires