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

Ali*_*rld 18 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.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页):

  1. ...

  2. 在Net-ASCII中,除非紧接着是NUL或LF,否则CR必须不出现,后者(CR LF)指定"新行"功能.今天,如上所述,CR通常只有在LF后面才会出现.因为页面布局在其他方面更好,因为NUL在某些编程语言中有特殊的解释,并且为了避免其他类型的混淆,最好应该如上所述避免使用CR NUL.

  3. 除了作为多个CR LF序列的副作用(例如,CR LF CR LF)之外,LF CR不应出现.

因此,Telnet中的换行符应始终如此,'\r\n'但大多数实现要么未更新,要么保留旧版'\n\r'以实现向后兼容性.

  • ;) 只是想说清楚;OP 似乎不知道 EOL 要求...... (2认同)

Inb*_*ose 14

'\r'表示“回车”,类似于'\n'“换行”或更常见的“换行”

在打字机的旧时代,您必须将写回行首的马车移动,然后将行向下移动才能写到下一行。

在现代计算机时代,出于多种原因,我们仍然拥有此功能。但大多数情况下,我们只使用'\n'并自动假设我们想从行首开始写作,否则就没有多大意义。

然而,有时我们想使用 JUST ,'\r'如果我想在输出中写一些东西,而不是换行并写其他东西,我想写一些我想写的东西已经写过,这是 linux 或 windows 命令行中有多少程序能够在同一行上更改“进度”信息。

现在大多数系统只使用'\n'来表示换行符。但有些系统同时使用两者。

你可以在其他一些答案中看到这样的例子,但最常见的是:

  • 窗口结束行 '\r\n'
  • mac 结束行 '\r'
  • unix/linux 使用 '\n'

其他一些程序也有特定的用途。

有关这些角色历史的更多信息

  • 对不起,但不同意。TELNET 协议本身需要`\r\n`(定义为协议中的行尾序列)。参见 [RFC854](https://tools.ietf.org/html/rfc854)。 (3认同)
  • @InbarRose 有点话题,但关于你的评论 \r 类似于 \n。我认为它们在(我猜至少是 linux)上有所不同。查看示例: `print "bbb\raaaa" # output : aaaa` `print "__bbb\raaaa" # output : aaaab` `print "_____bbb\raaaa" # output : aaaa_bbb` 这里的 \r 是信号行尾和光标移动到行首,随后的字符从那里打印出来。 (2认同)

NPE*_*NPE 6

\r是 ASCII回车(CR) 字符。

不同的操作系统使用不同的换行约定。最常见的是:

  • CR+LF ( \r\n);
  • LF ( \n);
  • CR ( \r)

\n\r(LF + CR)看起来标新立异。

编辑:我对Telnet RFC 的阅读表明:

  1. CR+LF 是 telnet 协议使用的标准换行符序列。
  2. LF+CR 是可接受的替代:

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