Twisted lineReceived not getting called

I encountered a strange behavior when i was building a command line interface in python. Here is the striped down version of the code that can reproduce the issue.

from twisted.internet import reactor, stdio
from twisted.protocols import basic

class CommandLine(basic.LineReceiver):
    def __init__(self):
        self.linebuf = ''
        self.setLineMode()

    # why lineReceived  doesn't work?
    # def lineReceived(self, data):
    def dataReceived(self, data):
        print 'data received ' + ' '.join([str(ord(c)) for c in data ])
        print data


if __name__=='__main__':
    stdio.StandardIO(CommandLine())
    reactor.run()

The code above works as intended, out put in the form of "data received 108 115 115 10" is printed everytime a line is entered. Here is a sample output using dataReceived:

$ python cmdline.py
hello
data received 104 101 108 108 111 10
hello

^[[A
data received 27 91 65 10

However nothing gets printed out except the echo of the command line itself when I use lineReceived instead of dataReceived in the code above. Example output using lineReceived:

$ python cmdline.py
hello
^[[A

According the the documentation on lineReceived, the lineReceived function gets invoked when a line is received with the LineReceiver in line mode.

For now I am using dataReceived to make it work. But I would like to find out why lineReceived is not working as intended. Any hint, suggestions, advice would be very much appreciated!

Regards.


ANSWERS:


The reason is line delimiter constant which is set to r'\r\n' by default (MS Windows delimiter). Try to set it to '\n' (Linux and Mac OS) instead:

class CommandLine(basic.LineReceiver):
    delimiter = '\n'


 MORE:


 ? How to use twistedweb with django on windows
 ? Python - Twisted and Unit Tests
 ? Manually giving the twisted (web) network stack a packet to process?
 ? Standard way of using a single port for multiple sockets?
 ? HTTP Download very Big File
 ? Network programming abstraction, decomposition
 ? Python chat : delete variables to clean memory in functions?
 ? Twisted network client with multiprocessing workers?
 ? PyAMF backend choices!
 ? Getting Started with Tornado