Python 什么是\r";你在下面的脚本中做什么?
我正在使用以下脚本使用Telnet重新启动路由器:Python 什么是\r";你在下面的脚本中做什么?,python,telnet,Python,Telnet,我正在使用以下脚本使用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.wri
#!/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")
我不知道为什么,但是从上面的代码中删除“\r”会使脚本无法工作。那么“\r”在这个脚本中做什么?通常什么时候使用“\r”
注意:我知道“回车”这个词,但仍然不知道它在我的脚本中的用法。我正在Linux中运行此脚本。
\r
是ASCII(CR)字符
不同的操作系统使用不同的换行约定。最常见的是:
- CR+LF(
)李>\r\n
- 低频(
)李>\n
- CR(
)\r
\n\r
(LF+CR)看起来很不传统
编辑:我对的阅读表明:
'\r'
字符是回车符,在网络虚拟终端会话中换行符需要回车换行符对
摘自(第11页): 如定义,序列“CR LF”将导致NVT 位于下一打印行的左边距处(如图所示, 例如,序列“LF CR”) 但是,从(第13页):
因此Telnet中的新行应该始终是
'\r\n'
,但大多数实现要么没有更新,要么保留旧的'\n\r'
,以便向后兼容。实际上,这与通常的Windows/Unix\r\n
vs\n
问题无关。TELNET协议本身将\r\n
定义为行尾序列,与操作系统无关。参见。'\r'
表示“回车”,它类似于'\n'
表示“换行”或更常见的“换行”
在老式打字机中,您必须将写回行首的回车移到行首,然后将行下移才能写到下一行
在现代计算机时代,出于多种原因,我们仍然拥有这种功能。但大多数情况下,我们只使用'\n'
,并自动假设我们希望从行的开头开始编写,因为否则就没有多大意义
但是,有时我们只想使用“\r”
,如果我想在输出中写入一些内容,而不是转到新行写入其他内容,我想在我已经编写的内容上写入一些内容,这是linux或windows命令行中有多少程序能够在同一行中更改“进度”信息
现在,大多数系统只使用'\n'
来表示换行符。但有些系统同时使用这两种方法
您可以在其他一些答案中看到这方面的例子,但最常见的是:
- windows以
'\r\n'
- mac以
'\r'
- unix/linux使用
'\n'
有关的更多信息,我使用谷歌阅读了有关回车的所有信息,但仍然无法在我的上述脚本中找到它的用途。我建议您也看看:这解释了所有转义字符。这个问题可能被问到也是因为打印一个字符不起什么作用,这是前进的路线。是的,很好,但注意他如何使用NL CR而不是CR NL…;)@ClassStacker
“\r\n”
是传统版本,但另一种方法也可以使用只是想说清楚,;OP似乎不知道EOL要求…抱歉,但不同意。TELNET协议本身需要\r\n
(定义为协议中的行尾序列)。请看。@isedev:我在RFC中看到很多关于crlf
的提到,只有一次提到LF-CR
。你能指出一个特定的页面/部分吗?因为阅读困难,是指通常的\r\n
。更正评论和答案。我的观点是,它实际上与操作系统无关,但与TELNET协议本身无关(即Linux上的TELNET和Windows上的TELNET都需要)。对不起,但我不同意。TELNET协议本身需要\r\n
(定义为协议中的行尾序列)。请参阅。@isedev我不确定您的评论与我的答案有何关联。我认为您的回答是错误的,或者请进一步解释。尽管如此,我还是说\r\n这是正确的,尽管事实上\n\r也可以工作。@Inbar:只是说在这种情况下,它与操作系统无关。它是由TELNET协议规范定义的,独立于操作系统。@在本主题中略加说明,但关于您的评论\r与\n类似。我认为它们在(我想至少在linux上)是不同的。查看示例:print“bbb\raaaa”#output:aaaa
print“uuubbb\raaaa”#output:aaaab
print“uuuuuuuuuubbb\raaaa”#output:aaaa_bbb
这里是信号行的末尾,光标移动到行的开头