我正在使用以下脚本通过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")
我不知道为什么,但是从上述代码中删除“ \ r”会使脚本无法正常工作。那么,该脚本中的“ \ r”有什么作用?通常什么时候使用“ \ r”?
注意:我了解“回车”,但仍无法在脚本中弄清楚它的用法。我正在Linux中运行此脚本。
该'\r'字符是回车,并且都需要用于在网络虚拟终端会话换行符回车换行对。
'\r'
根据旧的telnet规范(RFC 854)(第11页):
定义的序列“ CR LF”将使NVT位于下一个打印行的左边缘(例如,序列“ LF CR”)。
但是,根据最新规范(RFC5198)(第13页):
… 在Net-ASCII中,除非紧随其后是NUL或LF,并且后一个(CR LF)指定“换行”功能,否则不得显示CR。今天并且如上所述,CR通常应仅在LF之后出现。由于可以通过其他方式更好地进行页面布局,因为NUL在某些编程语言中具有特殊的解释,并且为了避免其他类型的混乱,因此应如上所述避免CR NUL。 LF CR不应出现,除非是多个CR LF序列(例如CR LF CR LF)的副作用。
…
在Net-ASCII中,除非紧随其后是NUL或LF,并且后一个(CR LF)指定“换行”功能,否则不得显示CR。今天并且如上所述,CR通常应仅在LF之后出现。由于可以通过其他方式更好地进行页面布局,因为NUL在某些编程语言中具有特殊的解释,并且为了避免其他类型的混乱,因此应如上所述避免CR NUL。
LF CR不应出现,除非是多个CR LF序列(例如CR LF CR LF)的副作用。
因此,Telnet中的换行符应该始终是,'\r\n'但是大多数实现尚未更新,或者'\n\r'为了向后兼容而保留了旧版本。
'\r\n'
'\n\r'