Problems with read_eager and Telnet

Terry Reedy tjreedy at udel.edu
Mon Feb 28 19:32:03 CET 2011


On 2/28/2011 10:54 AM, Robi wrote:
> Hi everybody,
>   I'm totally new to Python but well motivated :-)
>
> I'm fooling around with Python in order to interface with FlightGear
> using a telnet connection.

Given that FlightGear is a graphical flight simulator
http://www.flightgear.org/
https://secure.wikimedia.org/wikipedia/en/wiki/FlightGear
using a text terminal connection seems a bit odd,
unless using it just to get/set configuration,
in which case, speed should hardly seem an issue.
>
> I can do what I had in mind (send some commands and read output from
> Flightgear using the telnetlib) with a read_until() object to catch
> every output line I need, but it proved to be very slow (it takes 1/10
> of a sec for every read_until().

I presume you are using read_until(b'\n').
read_until cannot return any faster than the server sends complete lines

> I tried using the read_eager() object and it's waaaayyyy faster (it
> does the job in 1/100 of a sec, maybe more, I didn't tested) but it
> gives me problems, it gets back strange strings, repeated ones,
> partially broken ones, well ... I don't know what's going on with it.

read_eager is for when you want to parse the bytes yourself, such as 
when they come in a continuous stream without newline or other obvious 
separators. It will not return b'\n' any faster than read_until. It will 
simply give you your output lines in little bits that you would have to 
reassemble yourself.

> You see, I don't know telnet (the protocol) very good, I'm very new to
> Python and Python's docs are not very specific about that read_eager(9
> stuff.
>
> Could someone point me to some more documentation about that? or at
> least help me in getting a correct idea of what's going on with
> read_eager()?

Read the source Lib/telnetlib.py (as I just did). It is pretty 
straightforwad code.

-- 
Terry Jan Reedy




More information about the Python-list mailing list