Script per Kommandozeile beenden.
lima-city → Forum → Programmiersprachen → Python
beenden
befehl
code
dank
datei
eingabe
einlesen
ende
fangen
glaskugel
http
import
input
interpreter
modul
programm
signal
standard
stelle
url
-
Hallo, ich versuche meine Python-Script vorzeitig abzubrechen. Das besondere ist, er läuft in der Kommandozeile in einer endlos While. Mit PyGame (was ich einmal als GUI missbraucht habe, hatte ich einfach folgendes geschrieben habe:
for e in pygame.event.get(): if e.type == QUIT: quiteGame = True break
In der Python lib habe ich nichts vergleichbares gefunden.
Ich möchte auf folgende Events den Code abbrechen:
Mit dem drücken von mit strg-D und von kill <pid> Befehl. (Bei dem Kill Befehl bekomme ich nur Terminated: 15. Ich will allerdings selber noch 3 Code Zeilen ausführen...)
Ich hoffe ihr könnt nachvollziehen was ich will... Es ist eben nicht gut, wenn man übest müde ist und noch ein Beitrag schreiben will. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich habe Schwierigkeiten dein Problem zu verstehenaber ich rate mal in die Glaskugel:
Ausführen einer Funktion bei Programmende:
http://docs.python.org/library/atexit.html#module-atexit
Beitrag zuletzt geändert: 24.3.2012 1:30:47 von fatfox -
Wenn du auf ein kill-event reagieren willst, solltest du Signal-Handler benutzen:
#!/usr/bin/env python # -*- coding: utf-8 -*- import signal, sys import time #for sleep def myHandler( signal, stackframe ): print( "Signal handler was called",) sys.exit( 0 ) signal.signal( signal.SIGTERM, myHandler ) while True: time.sleep( 5 )
http://docs.python.org/py3k/library/signal.html#signal.alarm
Beitrag zuletzt geändert: 24.3.2012 7:57:38 von bladehunter -
matt3o12 schrieb:
@bladehunter: Ok. Danke.
Ich habe gemerkt, dass, wenn ich Strg+C drücke der Script einen KeyboardInterrupt Exception wirft.
Ich habe nur an Strg+D gedacht, da man so den $ python Kommandozeile beenden kann.
Unter Linux sendet ctrl+c ein SIGTERM (Code 15) an ein Programm. Python-Programme fangen dieses Signal aber auf und machen eine Exception draus. Ein normales kill auf der Kommandozeile (was auch ein SIGTERM sendet) funktioniert aber.
Und ctrl+d steht keineswegs für "Programm beenden", sondern für "Ende der Datei". Dein Python-Interpreter ließt von einer Pseudo-Datei names Standard-Input. Und dieser Standard-Input sind eben deine Eingaben oder eine andere Datenquelle. Wenn du jetzt ctrl+d drückst, legst du fest, dass an dieser Stelle die Datei zuende ist und der Python-Interpreter weiß dann, dass er fertig ist mit Code einlesen.
Und wenn du sagst
python meinscript.py
Dann liest der Python-Interpreter meinscript.py und nicht den Standard-Input. Und auch meinscript.py hat natürlich irgendwann ein Dateiende.
Beitrag zuletzt geändert: 24.3.2012 14:53:41 von bladehunter -
bladehunter schrieb:
matt3o12 schrieb:
@bladehunter: Ok. Danke.
Ich habe gemerkt, dass, wenn ich Strg+C drücke der Script einen KeyboardInterrupt Exception wirft.
Ich habe nur an Strg+D gedacht, da man so den $ python Kommandozeile beenden kann.
Unter Linux sendet ctrl+c ein SIGTERM (Code 15) an ein Programm. Python-Programme fangen dieses Signal aber auf und machen eine Exception draus. Ein normales kill auf der Kommandozeile (was auch ein SIGTERM sendet) funktioniert aber.
Und ctrl+d steht keineswegs für "Programm beenden", sondern für "Ende der Datei". Dein Python-Interpreter ließt von einer Pseudo-Datei names Standard-Input. Und dieser Standard-Input sind eben deine Eingaben oder eine andere Datenquelle. Wenn du jetzt ctrl+d drückst, legst du fest, dass an dieser Stelle die Datei zuende ist und der Python-Interpreter weiß dann, dass er fertig ist mit Code einlesen.
Und wenn du sagst
python meinscript.py
Dann liest der Python-Interpreter meinscript.py und nicht den Standard-Input. Und auch meinscript.py hat natürlich irgendwann ein Dateiende.
Ahhh! Vielen Danke! -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage