On 13/09/15 08:29, Manju M wrote:

Assume that I will pass IP and port information from a function to open the
telnet session. have opened the telnet session and after opening the telnet
session I returned telnet object to calling function.

That makes sense so far. Unfortunately its hard to read your code
below as it has lost all line formatting. Usually this is because
you have used HTML mail. It helps a lot if you post code as plain
text.

Now in the calling function If I use that object to read or write to
terminal I'm getting ERROR “AttributeError: 'NoneType' object has no
attribute 'read_very_eager'”.

A None type object often means you have a second return path
from your function that does not explicitly return anything.
For example in your function, if there is an exception you
will return None.


Looking at your code:

def open_telnet_conn(dname,ip,port):

You should probably set the port to some default value...

try:
TELNET_PORT = port
TELNET_TIMEOUT = 5
READ_TIMEOUT = 5
cmd = "show config"
#Logging into device

connection=telnetlib.Telnet(ip, TELNET_PORT, TELNET_TIMEOUT)

time.sleep(1)
connection.write(cmd + "\n")

#Here I'm able to write to connection object..
connection.write("\n")
time.sleep(2)

router_output = connection.read_very_eager()
print router_output

What do you get printed here?


return(connection)
except IOError:

print "Input parameter error! Please check username, password and file
name."

It looks like you always return connection unless you get an
exception which generates an error message.
I assume you do not see the error printed?

What happens if the connection does not succeed?
Do you only get IOError for all of the operations
you try? Could there be other errors? Are there?

#Function to read device IP and port . and this info for opening the telnet
session.
def IP_port(file):
T = []
F = open(file,'r')
F.seek(0)

You don't need to seek(0) on a newly opened file.
It starts at 0 automatically.

line=F.read()
tuples = re.findall(r'(.+?)\s+(.+?)\s+(\d+)',line)

I didn't check the regex but I assume you have printed
out tuples to ensure its correct?

for (dname,ip,port) in tuples:
T1=open_telnet_conn(dname,ip,port)
#HERE I will get the telnet object point to the same location as the
connection object. But I'm unable to write or read anything here. I think
need to convert the object T1 to TELNET CLASS object type..

Python doesn't need type conversions of that sort. You
are returning a telnet object from the function so the
T1 variable will reference a telnet object.

print T1

what prints here?

T1.write("show config") <<<<<<<<<ERROR PART


Show us the full error text. Python errors contain lots of
useful information but without seeing exactly what it says
we are partly guessing.

router_output = T1.read_very_eager()
print router_output
T.append(T1)
return(T)


# import the LC/RSP name ,port and IP address
file='/users/manmahal/MANJU/IP_port.txt'
list_of_telnet=IP_port(file)



*NOTE*: the content of the file is as below:

RSP1 172.27.40.60 2002

Please tell us more about the output.
And please repost the code in plain text.


--
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/
http://www.amazon.com/author/alan_gauld
Follow my photo-blog on Flickr at:
http://www.flickr.com/photos/alangauldphotos


_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to