30

次のスクリプトを使用して、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 で実行しています。

4

4 に答える 4

40

文字は'\r'キャリッジリターンであり、キャリッジリターンと改行のペアは両方ともネットワーク仮想端末セッションの改行に必要です。


古いtelnet仕様(RFC 854) (11ページ)から:

シーケンス「CRLF」は、定義されているように、NVTを次の印刷行の左マージンに配置します(たとえば、シーケンス「LFCR」のように)。

ただし、最新の仕様(RFC5198)(13ページ)から:

  1. ..。

  2. Net-ASCIIでは、直後にNULまたはLFが続き、後者(CR LF)が「改行」機能を指定する場合を除いて、CRは表示されてはなりません(MUSTNOT)。今日、上記で指定したように、CRは通常、LFが後に続く場合にのみ表示されます。ページレイアウトは他の方法で行う方がよいため、NULは一部のプログラミング言語で特別な解釈を行うため、また他の種類の混乱を避けるために、CRNULは上記のように避けることが望ましいです。

  3. LF CRは、複数のCR LFシーケンス(CR LF CR LFなど)の副作用を除いて表示されるべきではありません。

したがって、Telnetの改行は常に更新されている必要があります'\r\n'が、ほとんどの実装は更新されていないか、'\n\r'下位互換性のために古いものを保持しています。

于 2013-01-30T14:54:37.603 に答える
17

'\r''\n'は「改行」を意味し、「改行」またはより一般的には「改行」を意味するのと似ています

タイプライターの昔は、書き込みを行うキャリッジを行の先頭に移動し、次の行に書き込むために行を下に移動する必要がありました。

現代のコンピューター時代には、複数の理由からこの機能がまだあります。しかし、ほとんどの場合'\n'、行の先頭から書き始めたいと自動的に仮定します。

ただし、JUST を使用したい'\r'場合があります。それは、出力に何かを書き込みたい場合で、新しい行に移動して別の何かを書き込む代わりに、その上に何かを書き込みたい場合です。すでに書いたように、これは、Linux または Windows コマンド ラインで、同じ行で変化する「進行状況」情報を保持できるプログラムの数です。

現在、ほとんどのシステム'\n'は、改行を表すためにのみを使用しています。しかし、一部のシステムは両方を一緒に使用します。

他のいくつかの回答でこの例を見ることができますが、最も一般的なのは次のとおりです。

  • ウィンドウは次の行で終了します'\r\n'
  • mac は次の行で終了します'\r'
  • UNIX/Linux での使用'\n'

また、他のプログラムの中には、それらに特定の用途があるものもあります。

これらのキャラクターの歴史の詳細については、

于 2013-01-30T14:57:28.557 に答える
6

\rASCIIキャリッジ リターン(CR) 文字です。

さまざまなオペレーティング システムで使用されるさまざまな改行規則があります。最も一般的なものは次のとおりです。

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

\n\rLF + CR)は型にはまらないように見えます。

編集: Telnet RFCを読んだところ、次のことが示唆されました。

  1. CR+LF は、telnet プロトコルで使用される標準の改行シーケンスです。
  2. LF+CR は許容可能な代用です:

シーケンス "CR LF" は、定義されているように、NVT を次の印刷行の左マージンに配置します (たとえば、シーケンス "LF CR" のように)。

于 2013-01-30T14:52:28.927 に答える
0

\r\n実際、これは通常のWindows / Unixvsの問題とは何の関係もありません\n。TELNETプロトコル自体は\r\n、オペレーティングシステムとは関係なく、行末シーケンスとして定義されます。RFC854を参照してください。

于 2013-01-30T14:55:00.207 に答える