一尘不染

在以下脚本中“ \ r”有什么作用?

python

我正在使用以下脚本通过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中运行此脚本。


阅读 162

收藏
2020-12-20

共1个答案

一尘不染

'\r'字符是回车,并且都需要用于在网络虚拟终端会话换行符回车换行对。


根据旧的telnet规范(RFC 854)(第11页):

定义的序列“ CR LF”将使NVT位于下一个打印行的左边缘(例如,序列“ LF CR”)。

但是,根据最新规范(RFC5198)(第13页):

  1. 在Net-ASCII中,除非紧随其后是NUL或LF,并且后一个(CR
    LF)指定“换行”功能,否则不得显示CR。今天并且如上所述,CR通常应仅在LF之后出现。由于可以通过其他方式更好地进行页面布局,因为NUL在某些编程语言中具有特殊的解释,并且为了避免其他类型的混乱,因此应如上所述避免CR
    NUL。

  2. LF CR不应出现,除非是多个CR LF序列(例如CR LF CR LF)的副作用。

因此,Telnet中的换行符应该始终是,'\r\n'但是大多数实现尚未更新,或者'\n\r'为了向后兼容而保留了旧版本。

2020-12-20