новичок в Python, помогите с циклами - PullRequest
0 голосов
/ 25 июля 2011

у меня есть этот код с открытым исходным кодом, который используется для отклика ответа на запросы веб-сокетов:

_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 секунд, но время импорта не работает. Я получаю ошибку, пожалуйста, помогите с этим.

Ответы [ 2 ]

3 голосов
/ 25 июля 2011

для вашего первого вопроса, вы можете просто сказать

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 голосов
/ 25 июля 2011

Логика управления приведена в документации по Python (ссылка на 2.7).

Обратите внимание, что структуру if можно изменить следующим образом:

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)

Что касается проблемы с time.sleep () , вы должны убедиться, что вы делаете import time в начале файла.Если это не сработает, вы можете проверить, можете ли вы импортировать его напрямую через IDLE.То есть запустите IDLE и введите import time.Если это не помогло, пожалуйста, опубликуйте сообщение об ошибке.

...