2015-05-19 2 views
0

Я использую текстовую приключенческую игру на Python с Twisted, и я думаю, что я принципиально неправильно понял, что возвращается с функцией Twisted dataReceived. У меня есть следующее как часть моего общего кода;Python Twisted: что получается с помощью DataReceived и что я должен использовать вместо этого

def process(self, data): 
    print "Got command {}, {}".format(data, len(data)) 
    if data == "test": 
     print "DEBUG: got the test command" 


from twisted.internet import reactor, protocol 

class MudLoop(protocol.Protocol): 

    def connectionMade(self): 
    login(self) 

    def dataReceived(self, data): 
    process(self, data) 


factory = protocol.ServerFactory() 
factory.protocol = MudLoop 
reactor.listenTCP(12000,factory) 
reactor.run() 

строка не отправляется обратно из DataReceived запустит тест функции обработки для него и сделать что-то другое, например, если подключенный клиент входит в «тест», консольный вывод не принимается в соответствии с инструкцией DEBUG, в которой он получил команду тестирования. У меня есть пара теорий о том, почему, во-первых, то, что передается, не является строкой, второе - это то, что, хотя это строка, к ней добавляются невидимые символы (возврат каретки и новая строка?), Которые что не позволяет проверить, что было введено - это подтверждается моим тестом для вызываемой функции процесса, добавляющей длину команды в консоли на новой строке.

Какие из них являются истинными? Или что-то еще? И в любом случае следует ли тестировать строку, возвращенную из dataReceived таким образом? Исследование до того, как я разместил сообщение, похоже, говорит о том, что у других людей не было этой проблемы, но они столкнулись с другими проблемами позже, когда строки получаются в неопределенном порядке от нескольких клиентов. Если я решаю это, мой подход ошибочен, и я просто собираюсь решить следующую проблему?

+0

Проверьте символы возврата и символы новой строки в конце ввода, используйте 'print repr (data)' для отладки ввода. –

+0

Ahh HA! он действительно отправляет тест \ r \ n Есть ли способ, которым я могу удалить это или иначе нормализовать его? – Elomis

+0

На самом деле я никогда не могу написать простой код в функции процесса для нормализации ввода. – Elomis

ответ

Смежные вопросы