Ich habe ein langlaufendes Python-Skript in einer Terminal-Sitzung (der Host-Rechner ist ein FreeBSD-System), das alle 9 Minuten eine Aufgabe ausführt. Nun möchte ich in der Lage sein, diesen Sleep-Aufruf jederzeit zu unterbrechen, damit die Aufgabe sofort ausgeführt wird.
Wie kann ich das tun? Fangen Ctrl + C ist keine Option, da das Programm angehalten werden muss (und nicht nur der Ruhezustand unterbrochen werden soll). Alles andere, was ich mit einem Terminalfenster und einer Tastatur machen kann, ist in Ordnung.
2 Stimmen
"Die Tastenkombination Strg+C ist keine Option, da ich sie benötige, um das Programm zu beenden." Was ist das?
0 Stimmen
@IgnacioVazquez-Abrams, manchmal muss ich das Programm stoppen, und der einfachste Weg ist, Strg+C zu drücken. Daher möchte ich das Programm nicht unterbrechen.
sleep
durch das Einfangen derKeyboardInterrupt
.1 Stimmen
Müssen Sie in der Lage sein, das Programm durch einmaliges Drücken der Tastenkombination Strg+C zu beenden? Sie könnten es beim ersten Mal abfangen und beim zweiten Mal beenden. Was ist mit dem Abfangen eines weiteren Signals?
0 Stimmen
Können Sie dafür nicht einfach Strg-\ verwenden?
0 Stimmen
@Thomas, ich nehme an, ich könnte ein weiteres Signal empfangen. Ich bin mir nicht sicher, wie man das mit Python macht, aber wenn Sie sich sicher fühlen, eine Antwort zu posten, die Folgendes impliziert
SIGALRM
und die Unterbrechung einesraw_input
oder etwas in dieser Richtung, das könnte es sein. Die doppelte Tastenkombination Strg+C würde allerdings eine Reihe von Problemen mit sich bringen, die ich lieber vermeiden möchte.0 Stimmen
@IgnacioVazquez-Abrams, von dieser Tastenkombination habe ich noch nie gehört. Ich habe sie nachgeschlagen, und ich vermute, dass sie funktionieren könnte, wenn es auf meiner Tastatur entweder eine Pipe- oder eine Backslash-Taste gäbe. Das ist aber nicht der Fall (ich gebe diese Zeichen mit [alt]+[+] bzw. [alt]+[ù] ein, und die Tastenkombination Strg+beide bewirkt nichts in einem Terminalfenster).
0 Stimmen
使用する
stty
zu bindenSIGQUIT
dann eine andere Kombination.0 Stimmen
@IgnacioVazquez-Abrams, ein Sigquit verursacht einen Core Dump. Ich nehme an, ich könnte auch irgendwie Core-Dumps für die Sitzung deaktivieren, aber das wird zu einer Menge Arbeit für etwas, das ich hoffte, aus dem Skript zu tun.
0 Stimmen
Standardmäßig wird der Kern entsorgt. Sie könnten stattdessen einfach auf einen anderen Handler verweisen.