2016-07-25 13 views
0

Jedesmal, wenn ich STRG + C drücken, wenn ich ein Programm zeigt es leite, welche Linie sie ausführte und dann sagt:Wie wird eine Nachricht angezeigt, wenn der Benutzer STRG C drückt oder die Tastatur Interrupt verwendet?

Keyboard Interrupt 

Allerdings habe ich ein Programm leite die Informationen in Textdateien anhängt. Jemand drückt CTRL-C, während es nur anhängen würde, was der Code tun musste, bevor er unterbrochen wurde.

Ich hörte von try and except aber funktioniert das, wenn ich es am Anfang nenne und jemand während der Versuchsphase CTRL C drückt?

Wie kann ich es so, dass, wenn zu jeder Zeit im Programm jemand drückt CTRL-C, es wird nicht das Programm ausführen, alles zufällt es bisher tat und sagen:

Exiting Program 
+0

Sie müssen den^C-Handler erfassen und eine Shutdown-Funktion implementieren, um damit umzugehen. –

+0

Können Sie es als Antwort posten und beschreiben, was Sie meinen. –

+0

http://stackoverflow.com/questions/4205317/capture-keyboardinterrupt-in-python-without-try-except hier ist ein Weg, damit umzugehen :) nur ein wenig suchen –

Antwort

2

Probieren Sie es aus selbst:

das funktioniert (zu schnell auf Ihrem Rechner, wenn der Code ausgeführt wird, eine Null in dem Iterator for Schleife hinzugefügt werden):

a = 0 

try: 
    for i in range(1000000): 
     a = a + 1 
except (KeyboardInterrupt, SystemExit): 
    print a 
    raise 

print a 

Dies funktioniert nicht, da Daten in der Datei zwischengespeichert werden. Der try-Block macht das Speichern von Daten in der Datei nicht rückgängig.

a = 0 

try: 
    for i in range(1000000): 
     if a == 100: 
      with open("d:/temp/python.txt", "w") as file: 
       file.write(str(a)) 

     a = a + 1 
except (KeyboardInterrupt, SystemExit): 
    raise 

Dies funktioniert. Daten werden nur am Ende gespeichert.

a = 0 

try: 
    for i in range(1000000): 
     a = a + 1 
except (KeyboardInterrupt, SystemExit): 
    raise 

with open("d:/temp/python.txt", "w") as file: 
    file.write(str(a)) 

daher die Informationen innerhalb des try Block vorzubereiten und anschließend speichern.

Eine andere Möglichkeit: Speichern Sie eine temporäre Sicherungsdatei mit den Originaldaten und benennen Sie die Sicherungsdatei in den ursprünglichen Dateinamen im ausnahmeblock um.

+0

Danke. Ich werde das versuchen, sobald ich eine Chance bekomme –

+0

Wenn ich in die Datei schreibe dauert es einige Zeit. Was ist, wenn es Informationen generiert und vorbereitet und wenn es nach dem Ausnehmen beginnt und jemand ctrl-c drückt? –

+0

Nun, irgendwann müssen Sie anfangen, in die Datei zu schreiben. Wenn Sie den alten Dateiinhalt löschen, bevor Sie die neuen Daten schreiben, sind diese verloren. Wenn dies für Sie nicht ausreicht, bewahren Sie eine Sicherungsdatei bis zum Ende des Programms auf. Oder fügen Sie die neuen Daten am Ende der Datei an und löschen Sie den alten Inhalt aus der Datei am Ende. Das Löschen der Sicherungsdatei oder das Löschen der alten Inhalte kann jedoch auch einige Zeit in Anspruch nehmen. Wenn Strg + C gedrückt wird, können Sie auch nicht rückgängig machen. –