2011-07-25 54 views
0

我有這是用來回顯響應網絡套接字請求這個開源代碼:新的Python,幫助循環

_GOODBYE_MESSAGE = 'Goodbye' 


def web_socket_do_extra_handshake(request): 
    pass # Always accept. 


def web_socket_transfer_data(request): 
while True: 
    line = request.ws_stream.receive_message() 
    if line == "hello": 
     request.ws_stream.send_message("hello was sent") 
    if line == "bye": 
     request.ws_stream.send_message("bye was sent") 
    if line is None: 
     return 
    #request.ws_stream.send_message(line) 

    if line == _GOODBYE_MESSAGE: 
     return 

現在的問題是,我想修改(transfer_data方法),使內部while循環可以說它檢查字符串行,如果它等於某些文本,它應該返回其他東西給客戶端,如果行等於別的東西,它會返回一個不同的字符串。 我已經嘗試了很多,但似乎沒有工作,我知道這是非常基本的,但有人可以幫助我這個。
我想要做的另一件事是能夠添加延遲響應說5秒,但進口時間不起作用。我得到錯誤,請幫助。

+3

你可以發佈沒有用的代碼嗎? – Doug

+0

好吧,我修改了它,我使用了上面顯示的那個。我不熟悉python語法,但是這可能是錯誤的?另外我怎麼能在打印結果中添加延遲? – Johnydep

+0

上面的代碼給你什麼錯誤信息? (除了def行和while循環的開始之間的縮進問題,我認爲它不在原始代碼中)另外,僅供參考,您可以使用「if ... elif ... elif」結構來檢查什麼路線而不是「如果...如果...如果」。 – dpitch40

回答

3

關於第一個問題,你可以說

if line == "whatever": 
    # do stuff here, return, whatever... 
    request.ws_stream.send_message(line) 
else: 
    # do something else.... 

睡覺,你想

import time 
time.sleep(seconds) 

如果「導入時間」線路出現故障時,你有你的Python問題解釋器配置。

+0

謝謝,第一部分作品,但是時間睡眠功能有問題,不起作用 – Johnydep

+0

time.sleep(4)不起作用? –

+0

不,當我把它放在循環內時,它給我錯誤 – Johnydep

0

對於控制邏輯,請看Python documentation(鏈接爲2.7)。

注意您可以修改,如果結構是這樣的:有time.sleep()

def web_socket_transfer_data(request): 
    while True: # This was at the wrong indent - check it was a copy-paste issue 
     line = request.ws_stream.receive_message() 

     if line is "hello": 
      request.ws_stream.send_message("hello was sent") 
     elif line is "bye": # elif is the Pythonic form of else if 
      request.ws_stream.send_message("bye was sent") 
     elif line is _GOODBYE_MESSAGE or line is None: 
      break # This exits the while loop and by extension the method 

     time.sleep(5) 

對於這個問題,你要確保你的文件的開頭做import time。如果這不起作用,您可能需要檢查是否可以通過IDLE直接導入它。也就是說,運行IDLE並鍵入import time。如果失敗,請發佈它返回的錯誤。

+0

與IDLE,沒有錯誤。它接受命令。 我在此文件的開始處使用導入時間。但它仍然在CMD行上提供以下錯誤: – Johnydep

+0

[2011-07-25 19:48:39,503] [警告] root:mod_pywebsocket:../example/echo_wsh.py:採集處理程序中的錯誤:Traceback(最近一次調用最後): 文件 「C:\ Python26 \ lib中\站點包\ mod_pywebsocket \ dispatch.py​​」,線120,在global_dic 文件 「」 43行 request.ws_stream.send_message _source_handler_file EXEC handler_definition(「你好被髮送「) ^ IndentationError:unindent不匹配任何外部縮進級別 – Johnydep

+0

@Johnydep最後一點是相關部分。 'IndentationError'意味着它在第43行的空白處看到一些奇怪的東西 - 確保你的'while'循環從方法定義中縮進一次,並且if語句深度爲兩個縮進,動作深度較深。假設你已經把'time.sleep'放在了我所做的位置上,它應該是2深(與if語句一樣)。仔細檢查,沒有混合標籤和空格。 – thegrinner