Подтвердить что ты не робот

Что делает "\ r" в следующем script?

Я использую следующий script для перезагрузки моего маршрутизатора с помощью 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" из кода выше делает script нерабочим. Итак, что делает "\ r" в этом script и когда использовать "\ r" вообще?

Примечание. Я знаю о "Возврате каретки", но по-прежнему не мог понять его использование в моем script. Я запускаю этот script в Linux.

4b9b3361

Ответ 1

Символ '\r' - это возврат каретки, а пара кареток возврата-новой строки необходима для новой строки в сеансе сетевого виртуального терминала.


Из старой спецификации telnet (RFC 854) (стр. 11):

Последовательность "CR LF", как определено, приведет к тому, что NVT будет расположенный на левом краю следующей строки печати (как, например, последовательность "LF CR" ).

Однако из последней спецификации (RFC5198) (стр. 13):

  • ...

  • В Net-ASCII CR НЕ ДОЛЖЕН появляться, кроме   либо NUL, либо LF, с последним (CR LF), обозначающим "новый   line". Сегодня и, как указано выше, CR должен   обычно появляются только тогда, когда следует LF. Поскольку макет страницы   лучше сделать другими способами, поскольку NUL имеет специальный   интерпретации на некоторых языках программирования и избегать других   типы замешательства, CR NUL следует избегать как   указанных выше.

  • LF CR НЕ ДОЛЖНО появляться, кроме как побочный эффект нескольких CR LF   последовательности (например, CR LF CR LF).

Таким образом, новая строка в Telnet всегда должна быть '\r\n', но большинство реализаций либо не обновлялись, либо сохраняли старую '\n\r' для обратной совместимости.

Ответ 2

К несчастью, им еще не разрешено добавьте комментарий, но я предлагаю вам также взять посмотрите:
http://docs.python.org/release/2.2.3/ref/strings.html
который объясняет все escape-символы

Ответ 3

\r - это символ ASCII Carriage Return (CR).

Существуют различные соглашения о новой линии, используемые различными операционными системами. Наиболее распространенными являются:

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

\n\r (LF + CR) выглядит нетрадиционным.

edit: Мое чтение Telnet RFC предполагает, что:

  • CR + LF - это стандартная последовательность строк, используемая протоколом telnet.
  • LF + CR является приемлемой заменой:

Последовательность "CR LF", как определено, приведет к тому, что NVT будет расположенный на левом краю следующей строки печати (как, например, последовательность "LF CR" ).

Ответ 5

Собственно, это не имеет никакого отношения к обычной проблеме Windows/Unix \r\n vs \n. Протокол TELNET сам определяет \r\n как последовательность конца строки, независимо от операционной системы. См. RFC854.

Ответ 6

'\r' означает "возврат каретки" и он похож на '\n', что означает "разрыв строки" или чаще "новая строка"

в старые времена пишущих машинок вам нужно будет переместить каретку, которая вернется к началу строки, и переместить строку вниз, чтобы записать на следующую строку.

в современную компьютерную эру мы все еще имеем эту функциональность по нескольким причинам. но в основном мы используем только '\n' и автоматически предполагаем, что мы хотим начать запись с начала строки, так как это не имеет особого смысла.

однако, есть несколько раз, когда мы хотим использовать JUST '\r', и это было бы, если бы я хотел что-то написать на выходе, а вместо того, чтобы перейти к новой строке и написать что-то еще, я хочу чтобы написать что-то над тем, что я уже написал, это то, сколько программ в Linux или в командной строке Windows могут иметь информацию о "прогрессе", которая изменяется в одной строке.

в настоящее время большинство систем используют только '\n' для обозначения новой строки. но некоторые системы используют оба вместе.

вы можете увидеть примеры этого в некоторых других ответах, но наиболее распространенными являются:

  • окна заканчиваются строками с '\r\n'
  • mac заканчивает строки с помощью '\r'
  • Использование unix/linux '\n'

а некоторые другие программы также имеют для них конкретные возможности.

для получения дополнительной информации о истории этих символов