2016-03-31 12 views
1

Dies ist mein erstes Mal mit SimpleHTTPServer arbeiten, und ehrlich gesagt mein erstes Mal mit Web-Servern im Allgemeinen arbeiten, und ich habe ein frustrierendes Problem. Ich starte meinen Server (über SSH) und dann werde ich versuchen, darauf zuzugreifen und alles wird gut. Aber ich werde ein paar Stunden später wiederkommen und der Server wird nicht mehr laufen. Und zu diesem Zeitpunkt hat die SSH-Sitzung getrennt, so dass ich nicht sehen kann, ob es Fehlermeldungen gab. (Ja, ich weiß, ich sollte etwas wie Bildschirm verwenden, um die Shell-Nachrichten zu speichern - versuche das jetzt, aber ich muss warten, bis es wieder herunterfährt.)Python SimpleHTTPServer geht weiter und ich weiß nicht, warum

Ich dachte, es könnte nur sein, dass mein Code war Ich habe eine Ausnahme geworfen, da ich keine Fehlerbehandlung hatte, aber ich fügte hinzu, was ein hübscher Catch-All-Try/Catch-Block sein sollte, und ich habe immer noch das Problem. (Ich fühle mich wie das ist wahrscheinlich nicht die beste Methode zur Fehlerbehandlung, aber ich bin neu in diesem an ... so lassen Sie mich wissen, ob es ein besserer Weg, dies zu tun)

class MyRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler): 
    # (this is the only function my request handler has) 
    def do_GET(self): 
     if 'search=' in self.path: 
      try: 
       # (my code that does stuff) 
      except Exception as e: 
       # (log the error to a file) 
      return 
     else: 
      SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self) 

Hat jemand einen Rat um Dinge zu überprüfen oder um das Problem zu diagnostizieren? Höchstwahrscheinlich, denke ich, ist es, dass mein Code irgendwo anders abstürzt ... aber wenn es etwas Besonderes gibt, sollte ich wissen, wie SimpleHTTPServer funktioniert, lass es mich wissen.

+0

Als ersten Schritt könnten Sie eine 'exception BaseException als e:' hinzufügen, um alle zu erfassen die anderen Ausnahmen, die wie 'SystemExit' ausgelöst werden können, wenn Ihr Code dies versehentlich anruft. –

+0

@ TadhgMcDonald-Jensen Fängt BaseException mehr Ausnahmetypen als Ausnahme? – ekl

+0

Ja, wenn versucht wird, eine Ausnahme auszulösen, die keine Unterklasse von BaseException ist, wird 'TypeError: Exceptions müssen von BaseException abgeleitet werden –

Antwort

0

Ich hatte nie SimpleHTTPServer läuft für einen längeren Zeitraum in der Regel verwende ich es einfach, um ein paar Dateien auf eine Ad-hoc-Weise zu übertragen, aber ich denke, dass es nicht so schlimm sein würde, solange Ihre Sicherheitsbeschränkungen sind woanders (dh Firewall) und Sie brauchen nicht viel Maßstab.

Die SSH-Sitzung wird beendet, wodurch Ihre Aufgaben (Vordergrund- und Hintergrundaufgaben) beendet werden. Es gibt zwei Lösungen:

  1. Wie bereits erwähnt, verwenden Sie ein Dienstprogramm wie Bildschirm, um zu verhindern, dass Ihre Sitzung endet.
  2. Wenn Sie wirklich möchten, dass dies für einen längeren Zeitraum ausgeführt wird, sollten Sie in der Dokumentation Ihres Betriebssystems nachlesen, wie Sie Dienste starten/stoppen/aktivieren (heutzutage verwenden die meisten coolen Kinder systemd, aber Sie könnten sich auch SysVinit oder eine andere init-System finden Verwendung)

EDIT:

Dieser Link in den Kommentaren, aber ich dachte, dass ich es here setzen sollte, wie es diese Frage beantwortet ziemlich gut

+0

Wie endet die SSH-Sitzung? Würde es ein 'KeyboardInterrupt' zum Python-Programm auslösen? (In diesem Fall würde 'except BaseException' ausgeführt anstatt zu beenden) –

+0

Die SSH-Sitzung wird beendet, da sshd so konfiguriert ist, dass inaktive Sitzungen nach einer gewissen Zeit getrennt werden (Sie können diese Einstellungen anpassen [hier] (http: // unix .stackexchange.com/a/150406/90261) einige Informationen zu ihnen) und [hier] (http://serverfault.com/a/463375) gibt einige Informationen darüber, was tatsächlich getan wird, um die Prozesse zu beenden, die zu Ihrer Sitzung gehören . – iLoveTux

+0

Ahhhhhhh okay, das ist ein grundlegendes Missverständnis, das ich hatte, wie SSH funktioniert. Dies ist die Antwort dann. Vielen Dank. – ekl