I am using following script to reboot my router using Telnet:
#!/usr/bin/env python
import os
import telnetlib
from time import sleep
host = "192.168.1.1"
user = "USER"
password = "PASSWORD"
cmd = "system restart"
tn = telnetlib.Telnet(host)
sleep(1)
tn.read_until("Login: ")
tn.write(user + "\n\r")
sleep(1)
tn.read_until("Password: ")
tn.write(password + "\n\r")
sleep(1)
tn.write(cmd + "\n\r")
I don't know why but removing "\r" from above code make the script non-working. So what does "\r" do in this script and when to use "\r" in general?
Note: I know about "Carriage Return" but still could not figure out its use in my script. I am running this script in Linux.
Actually, this has nothing to do with the usual Windows / Unix
\r\n
vs\n
issue. The TELNET procotol itself defines\r\n
as the end-of-line sequence, independently of the operating system. See RFC854.The
'\r'
character is the carriage return, and the carriage return-newline pair is both needed for newline in a network virtual terminal session.From the old telnet specification (RFC 854) (page 11):
However, from the latest specification (RFC5198) (page 13):
So newline in Telnet should always be
'\r\n'
but most implementations have either not been updated, or keeps the old'\n\r'
for backwards compatibility.it is the carriage return control character. http://en.wikipedia.org/wiki/Carriage_return
\r
is the ASCII Carriage Return (CR) character.There are different newline conventions used by different operating systems. The most common ones are:
\r\n
);\n
);\r
).The
\n\r
(LF+CR) looks unconventional.edit: My reading of the Telnet RFC suggests that:
'\r'
means 'carriage return' and it is similar to'\n'
which means 'line break' or more commonly 'new line'in the old days of typewriters, you would have to move the carriage that writes back to the start of the line, and move the line down in order to write onto the next line.
in the modern computer era we still have this functionality for multiple reasons. but mostly we use only
'\n'
and automatically assume that we want to start writing from the start of the line, since it would not make much sense otherwise.however, there are some times when we want to use JUST the
'\r'
and that would be if i want to write something to an output, and the instead of going down to a new line and writing something else, i want to write something over what i already wrote, this is how many programs in linux or in windows command line are able to have 'progress' information that changes on the same line.nowadays most systems use only the
'\n'
to denote a newline. but some systems use both together.you can see examples of this given in some of the other answers, but the most common are:
'\r\n'
'\r'
'\n'
and some other programs also have specific uses for them.
for more information about the history of these characters
Unfortunatly im not allowed yet to
add a comment but i suggest you also take
look at :
http://docs.python.org/release/2.2.3/ref/strings.html
which explains all escape characters