soup scraping find_next_sibling examples compile beautiful python telnet

python - scraping - ¿Qué hace “/ r” en el siguiente script?



select beautifulsoup (6)

Estoy usando el siguiente script para reiniciar mi enrutador usando 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")

No sé por qué, pero eliminar "/ r" del código anterior hace que el script no funcione. Entonces, ¿qué hace "/ r" en este script y cuándo usar "/ r" en general?

Nota: sé sobre "Retorno de carro" pero aún no pude averiguar su uso en mi script. Estoy ejecutando este script en Linux.



El carácter ''/r'' es el retorno de carro, y el par de retorno-nueva línea de carro es necesario para la nueva línea en una sesión de terminal virtual de red.

De la especificación de telnet anterior (RFC 854) (página 11):

La secuencia "CR LF", tal como se define, hará que la NVT se coloque en el margen izquierdo de la siguiente línea de impresión (como, por ejemplo, la secuencia "LF CR").

Sin embargo, de la última especificación (RFC5198) (página 13):

  1. ...

  2. En Net-ASCII, CR NO DEBE aparecer a menos que sea seguido inmediatamente por NUL o LF, y este último (CR LF) designa la función "nueva línea". Hoy y como se especificó anteriormente, el CR generalmente debe aparecer solo cuando está seguido de LF. Debido a que el diseño de la página se realiza mejor de otra manera, debido a que NUL tiene una interpretación especial en algunos lenguajes de programación, y para evitar otros tipos de confusión, CR NUL se debe evitar preferiblemente como se especifica anteriormente.

  3. LF CR NO DEBE aparecer excepto como un efecto secundario de múltiples secuencias de CR LF (por ejemplo, CR LF CR LF).

Por lo tanto, la nueva línea en Telnet siempre debe ser ''/r/n'' pero la mayoría de las implementaciones no se han actualizado o mantienen el antiguo ''/n/r'' para compatibilidad con versiones anteriores.


En realidad, esto no tiene nada que ver con el problema habitual de Windows / Unix /r/n vs /n . El procotol TELNET en sí mismo define /r/n como la secuencia de fin de línea, independientemente del sistema operativo. Ver RFC854 .



''/r'' significa ''retorno de carro'' y es similar a ''/n'' que significa ''salto de línea'' o más comúnmente ''línea nueva''

en los viejos tiempos de las máquinas de escribir, tendría que mover el carro que escribe al inicio de la línea, y mover la línea hacia abajo para escribir en la siguiente línea.

En la era de la computación moderna todavía tenemos esta funcionalidad por múltiples razones. pero sobre todo usamos solo ''/n'' y asumimos automáticamente que queremos comenzar a escribir desde el principio de la línea, ya que no tendría mucho sentido de lo contrario.

sin embargo, hay ocasiones en las que queremos usar JUST ''/r'' y eso sería si quisiera escribir algo en una salida, y en lugar de bajar a una nueva línea y escribir otra cosa, quiero escribir Algo sobre lo que ya escribí, esta es la cantidad de programas en Linux o en la línea de comandos de Windows que pueden tener información de ''progreso'' que cambia en la misma línea.

hoy en día, la mayoría de los sistemas usan solo el ''/n'' para denotar una nueva línea. Pero algunos sistemas usan ambos juntos.

Puedes ver ejemplos de esto en algunas de las otras respuestas, pero las más comunes son:

  • Windows termina líneas con ''/r/n''
  • Mac termina líneas con ''/r''
  • Unix / Linux usa ''/n''

y algunos otros programas también tienen usos específicos para ellos.

Para más información sobre la historia de estos personajes.


/r es el carácter de retorno de carro (CR) ASCII.

Existen diferentes convenios de nueva línea utilizados por diferentes sistemas operativos. Los más comunes son:

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

El /n/r (LF + CR) parece poco convencional.

edición: mi lectura del RFC de Telnet sugiere que:

  1. CR + LF es la secuencia de nueva línea estándar utilizada por el protocolo telnet.
  2. LF + CR es un sustituto aceptable:

La secuencia "CR LF", tal como se define, hará que la NVT se coloque en el margen izquierdo de la siguiente línea de impresión (como, por ejemplo, la secuencia "LF CR").