Python 什么是\r";你在下面的脚本中做什么?

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

我正在使用以下脚本使用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
是ASCII(CR)字符

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

  • CR+LF(
    \r\n
  • 低频(
    \n
  • CR(
    \r
\n\r
(LF+CR)看起来很不传统

编辑:我对的阅读表明:

  • CR+LF是telnet协议使用的标准换行序列
  • LF+CR是可接受的替代品:
  • 如定义,序列“CR LF”将导致NVT 位于下一打印行的左边距处(如图所示, 例如,序列“LF CR”)


    '\r'
    字符是回车符,在网络虚拟终端会话中换行符需要回车换行符对


    摘自(第11页):

    如定义,序列“CR LF”将导致NVT 位于下一打印行的左边距处(如图所示, 例如,序列“LF CR”)

    但是,从(第13页):

  • 在净ASCII中,除非紧跟其后,否则CR不得出现 通过NUL或LF,后者(CR LF)表示“新 “行”功能。今天,如上所述,CR应 通常仅在后跟LF时出现。因为页面布局 在其他方面做得更好,因为NUL有一个特殊的 在某些编程语言中进行解释,并避免其他 如有混淆,最好避免使用CR NUL 如上所述

  • LF CR不应出现,除非是多重CR LF的副作用 序列(例如,CR LF CR LF)


  • 因此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
    这里是信号行的末尾,光标移动到行的开头