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 = ''

    # 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__':

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
data received 104 101 108 108 111 10

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

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!



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'


 ? 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