2016-03-31 31 views
1

這是我第一次使用SimpleHTTPServer,老實說,我是第一次使用Web服務器,而且我有一個令人沮喪的問題。我會啓動我的服務器(通過SSH),然後我會去嘗試訪問它,一切都會好起來的。但幾小時後我會回來,服務器將不再運行。到那時,SSH會話已經斷開,所以我看不到是否有任何錯誤消息。 (是的,我知道我應該使用類似屏幕的東西來保存shell信息 - 現在就試試,但我需要等待它再次下降。)Python SimpleHTTPServer繼續下去,我不知道爲什麼

我以爲這可能只是我的代碼是拋出一個異常,因爲我沒有錯誤處理,但我添加了什麼應該是一個漂亮的try-catch塊,而且我仍然遇到了這個問題。 (我覺得這可能不是錯誤處理的最佳方法,但我在這個新的......所以讓我知道,如果有更好的方法來做到這一點)

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) 

沒有人有任何建議檢查事項,或診斷問題的方法?我想最有可能的是,我的代碼只是在其他地方崩潰......但如果有什麼特別的我應該知道SimpleHTTPServer的運作方式,請告訴我。

+0

作爲第一步,你可以添加一個'除了BaseException as e:'來捕獲所有如果你的代碼偶然會引發這種情況,那麼可以引發其他異常,比如'SystemExit'。 –

+0

@ TadhgMcDonald-Jensen BaseException是否捕獲比異常更多的異常類型? – ekl

+0

是的,如果任何不是BaseException的子類的異常被嘗試提出,它就會引發'TypeError:異常必須從BaseException' –

回答

0

我從來沒有SimpleHTTPServer運行一段時間通常我只是用它來以臨時的方式傳輸幾個文件,但我想只要你的安全限制不會太糟糕在其他地方(即防火牆),你不需要太多的規模。

SSH會話正在結束,它正在終止您的任務(前臺和後臺任務)。有兩種解決方案:

  1. 就像你已經提到的使用屏幕等工具來阻止你的會話結束。
  2. 如果你真的想讓它運行一段時間,你應該查看你的操作系統的文檔,瞭解如何啓動/停止/啓用服務(現在大多數酷酷的孩子正在使用systemd,但你也可能發現自己使用SysVinit或其他一些初始化系統)

編輯:

此鏈接是在的意見,但我想我應該把它here因爲它回答了這個問題非常好

+0

ssh會話如何結束?它會提高'KeyboardInterrupt'到python程序? (在這種情況下'除了BaseException'將被運行而不是退出) –

+0

SSH會話正在結束,因爲sshd被配置爲在一段時間後斷開空閒會話(您可以調整這些設置[這裏是](http:// unix .stackexchange.com/a/150406/90261)關於它們的一些信息)和[這裏](http://serverfault.com/a/463375)是關於殺死你的會話所擁有的進程實際做了什麼的一些信息。 – iLoveTux

+0

Ahhhhhhh好的,這是我對ssh的工作原理的基本誤解。這就是答案。謝謝。 – ekl

相關問題