2015-02-08 5 views
7

Wenn ich etwas tun, wieStopp Sublime Text von Endlos-Schleife ausgeführt werden

while True: 
    print('loop') 

und führen Sie diesen Code in erhaben ich nicht in der Lage bin, ihn zu stoppen. Ich muss den Prozess manuell beenden und Sublime neu starten.

Gibt es eine Möglichkeit, eine Art von 'max_execution_time' oder eine andere Problemumgehung zu setzen, die es uns erlaubt, dies schön zu stoppen?

+0

'Strg + C' sollte als Tastatur-Interrupt fungieren. –

+0

Leider funktioniert das nur im Terminal, aber nicht im Sublime. Sublime wird irgendwie eingefroren und ignoriert alle Eingaben. – Finn

Antwort

18

Sie zu takten wollen ctrl verwenden + brechen. Zu Ihrer eigenen Information, gehen Sie einfach unter Extras in Sublime Text und Sie werden sehen Abbrechen Build und der oben genannten Hotkey. Es funktioniert gut für Endlosschleifen. Es genügt zu sagen, ich habe das gleiche passiert! ;)

+0

Scheint so, als wäre das eine Lösung. Aber sobald eine Endlosschleife beginnt, wird sublime (Python) die gesamte CPU auffressen und alle Eingaben ignorieren. – Finn

+0

@Finn Das ist seltsam. Ich würde neugierig sein, um zu sehen, welche Art von Code Sie ausführen. Jetzt, wo ich darüber nachdenke, gab es eine Zeit, in der mir das Gleiche passiert ist, aber ich erinnere mich im Moment nicht daran, was es verursacht hat. Ich wäre sehr interessiert daran, mehr darüber zu verstehen, was dazu führen kann, dass Sublime alle Eingaben ignoriert. Sicher, diese 'während True: print (' loop ') 'verursacht nicht das Problem, das Sie beschreiben, aber, oder? Das gleiche an meiner Maschine kann leicht mit dem erwähnten Hotkey unterbrochen werden. – Eithos

+0

Endlich kann ich 'ctrl + break' benutzen, nachdem ich sublime und python neu installiert habe. – Finn

2

Sie haben hier ein paar Optionen. Sie könnten eine große maximale Anzahl von Iterationen gesetzt (Ich mache das eigentlich mit den meisten While-Schleifen, bis ich komplett meinen Code gedebuggt haben, Endlosschleife Schmerzen zu vermeiden): So zum Beispiel

max_iterations = 100000000 
while i < max_iterations: 
    print("Hello World") 

Eine Alternative wäre, mit Zeitmodul die Ausführungszeit des Codes wie diese

import time 
max_execution_time = 10000000 #this will be in seconds 
start_time = time.clock() 
elapsed_time = 0 
while elapsed_time < max_execution_time: 
    elapsed_time = time.clock() = start_time 
    #Your loop code here 
0

Für mich (unter Linux), gibt es keine break Taste auf der Tastatur und diese Verknüpfung wurde irgendwie in eine andere Kombination gebunden: ctrl + alt + c.

können Sie finden, wo es im Tools Menü gebunden ist:

enter image description here

nach dem Skript zu unterbrechen sollten Sie den Text [Cancelled] zur Sublime Text Konsole gedruckt sehen.