Regarding Telnet library in python

Eddie Corns eddie at
Wed Aug 13 16:25:41 CEST 2008

Hishaam <hishaam.ab at> writes:


>In python documentation, i found a telnet example as follows:

>import getpass
>import sys
>import telnetlib

>HOST = "localhost"
>user = raw_input("Enter your remote account: ")
>password = getpass.getpass()

>tn = telnetlib.Telnet(HOST)

>tn.read_until("login: ")
>tn.write(user + "\n")
>if password:
>    tn.read_until("Password: ")
>    tn.write(password + "\n")


>print tn.read_all()

>The ouput of it as follows:

>Enter your remote account: root

>Last login: Mon Aug 13 11:54:32 from
>Sun Microsystems Inc.   SunOS 5.10      Generic January 2005
># Desktop     boot        hishaam     net         system      work
>Documents   cdrom       home        opt         tfile2      zonemgr
>File.txt    dev         kernel      platform    tmp
>QA_tmp      devices     lib         proc        usr
>acunix      etc         lost+found  sbin        var
>bin         export      mnt         sfile       vol


>The difficulty i find in this is th code line "print tn.read_all()" is
>used for reading all of the output of the code at once.

>Is there a possibility to read the stdout of each command by command
>like -

># ls
><stdout 1>
>[capture <stdout 1> in a variable]
># cd /root
><stdout 2>
>[capture <stdout 2> in a variable]

>Like the above would be useful if there are a large number of commands
>to be executed in the telnet session.

>Can anyone help on this?


One way of doing this is to send the commands one at a time and do: (untested)

  prompt = '\n# '

  stdout = tn.read_until(prompt)
  for line in stdout.splitlines():

alternatively just send them all in one go as you have been and save the
output in a variable and split that on the prompt.  In either case you may
want to change the prompt to something easier to match on like "$hostname# ".


More information about the Python-list mailing list