web-dev-qa-db-ja.com

次のスクリプトで「\ r」は何をしますか?

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

18
Alinwndrld

'\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. LF CRは、複数のCR LFシーケンス(たとえば、CR LF CR LF)の副作用として以外に表示されるべきではありません。

したがって、Telnetの改行は常に'\r\n'しかし、ほとんどの実装は更新されていないか、古い'\n\r'後方互換性のため。

28

'\r'は「キャリッジリターン」を意味し、「改行」またはより一般的には「改行」を意味する'\n'に似ています。

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

現代のコンピューター時代には、いくつかの理由でこの機能がまだあります。しかし、ほとんどの場合、'\n'のみを使用し、行の先頭から書き込みを開始することを自動的に想定します。

ただし、'\r'だけを使用したい場合があります。それは、出力に何かを書きたい場合や、新しい行に行って別の何かを書く代わりに、私がすでに書いたものの上に何かを書いてください、これはLinuxまたはWindowsのコマンドラインでいくつのプログラムが同じ行で変化する「進行」情報を持つことができるかです。

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

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

  • windowsは'\r\n'で行を終了します
  • macは行を'\r'で終了します
  • unix/linux use '\n'

また、他のいくつかのプログラムにもそれらの特定の用途があります。

これらの文字の履歴 の詳細については

4
Inbar Rose

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

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

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

\n\r(LF + CR)は型破りに見えます。

edit:Telnet RFC の私の読書はそれを示唆しています:

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

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

3
NPE

それは復帰制御文字です。 http://en.wikipedia.org/wiki/Carriage_return

0
Andreas Frische

実際、これは通常のWindows/Unixとは関係ありません\r\n vs \n 問題。 TELNET procotol自体は\r\nは、オペレーティングシステムに関係なく、行末シーケンスとして。 RFC854 を参照してください。

0
isedev