我使用以下脚本使用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")
Run Code Online (Sandbox Code Playgroud)
我不知道为什么,但从上面的代码中删除"\ r"使脚本无法正常工作.那么"\ r"在这个脚本中做什么以及何时一般使用"\ r"?
注意:我知道"回车",但仍然无法弄清楚它在我的脚本中的用途.我在Linux中运行此脚本.
Som*_*ude 29
该'\r'字符是回车符,并且网络虚拟终端会话中的换行符都需要回车 - 换行符对.
从旧的telnet规范(RFC 854)(第11页):
如所定义的,序列"CR LF"将使NVT定位在下一个打印行的左边缘处(例如,序列"LF CR").
但是,从最新规范(RFC5198)(第13页):
...
在Net-ASCII中,除非紧接着是NUL或LF,否则CR必须不出现,后者(CR LF)指定"新行"功能.今天,如上所述,CR通常只有在LF后面才会出现.因为页面布局在其他方面更好,因为NUL在某些编程语言中有特殊的解释,并且为了避免其他类型的混淆,最好应该如上所述避免使用CR NUL.
除了作为多个CR LF序列的副作用(例如,CR LF CR LF)之外,LF CR不应出现.
因此,Telnet中的换行符应始终如此,'\r\n'但大多数实现要么未更新,要么保留旧版'\n\r'以实现向后兼容性.
Inb*_*ose 14
'\r'表示“回车”,类似于'\n'“换行”或更常见的“换行”
在打字机的旧时代,您必须将写回行首的马车移动,然后将行向下移动才能写到下一行。
在现代计算机时代,出于多种原因,我们仍然拥有此功能。但大多数情况下,我们只使用'\n'并自动假设我们想从行首开始写作,否则就没有多大意义。
然而,有时我们想使用 JUST ,'\r'如果我想在输出中写一些东西,而不是换行并写其他东西,我想写一些我想写的东西已经写过,这是 linux 或 windows 命令行中有多少程序能够在同一行上更改“进度”信息。
现在大多数系统只使用'\n'来表示换行符。但有些系统同时使用两者。
你可以在其他一些答案中看到这样的例子,但最常见的是:
'\r\n''\r''\n' 其他一些程序也有特定的用途。
有关这些角色历史的更多信息
\r是 ASCII回车(CR) 字符。
不同的操作系统使用不同的换行约定。最常见的是:
\r\n);\n);\r)该\n\r(LF + CR)看起来标新立异。
编辑:我对Telnet RFC 的阅读表明:
定义的序列“CR LF”将使 NVT 定位在下一个打印行的左边距(例如,序列“LF CR”)。