• Publicidad

Envió de comandos a un switch

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Envió de comandos a un switch

Notapor TELCO71 » 2007-12-07 13:57 @623

Estimado Explorer , :lol:

Necesito saber cómo puedo enviar dentro de un script en Perl el carácter de "Y" a un switch Huawei para grabar la configuración luego que ejecuto el comando "save" .

Te detallo la sintaxis del comando dentro del equipo:

Código: Seleccionar todo
<SWITCH>save
The configuration will be written to the device.
Are you sure?[Y/N]Y
Now saving current configuration to the device.
Saving configuration. Please wait...
......
Configuration is saved to flash memory successfully.
 Unit1 save configuration flash:/vrpcfg.cfg successfully

<SWITCH>


Y te detallo lo que estoy realizando dentro del script:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
        $sesion->cmd('save');
        #$sesion->waitfor (Match => '/Y/N/');
        $sesion->cmd('Y');
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


De la forma que lo estoy haciendo no me sirve ya que el "Y" que le mando lo tomó como un comando o sentencia posterior al comando de " save " o sea que cuando le llega el "Y" al switch no me sirve ya que el comando anterior dio time out. :cry:

¿ Cómo podría pasarme la confirmación del Yes dentro del comando Save ? :oops:

Saludos y gracias , :wink:
TELCO
Avatar de Usuario
TELCO71
Perlero nuevo
Perlero nuevo
 
Mensajes: 48
Registrado: 2006-08-10 10:43 @488
Ubicación: Buenos Aires / Argentina

Publicidad

Notapor explorer » 2007-12-07 14:54 @663

El error está en la palabra 'Match', porque '/Y/N/' NO es una expresión regular que coincida con lo que tu esperas ([Y/N]). Te faltaba 'escapar' la barra inclinada de en medio: '/Y\/N/'.

De todas formas, yo creo que es más claro que uses la opción 'String':

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$sesion->waitfor(String => 'Are you sure?[Y/N]');
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Así, le estamos diciendo exactamente qué cadena de caracteres esperamos a continuación, antes de enviarle el "Y".

No he manejado mucho String y no sé decirte ahora mismo si es mejor ponerlo de esa manera o dejarlo como String => 'Y/N'.

P.D. No lo he probado. Si no va a la primera, prueba a 'escapar' el '/' como te indiqué en el primer párrafo.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor TELCO71 » 2007-12-09 17:43 @780

Estimado Explorer , :lol:

Según lo que estoy analizando por las salidas de los comandos en Perl... estoy detectando que el " Y " se lo tendría que pasar de alguna manera dentro del comando " save " .

Estoy viendo que si lo mando en otra línea de Perl el switch lo interpreta como un comando más y eso no me sirve . :oops:

Digamos que el " Y" le llega luego que el comando " save " generó un time-out.


Salida del script durante la ejecución:

Código: Seleccionar todo
pattern match timed-out
command timed-out


Salida al terminar el script de Perl en el archivo txt:

Código: Seleccionar todo
The configuration will be written to the device.
Are you sure?[Y/N]
<SWITCH>Y
        ^
 % Unrecognized command found at '^' position.
<SWITCH>


¿Cómo se podría hacer eso dentro de la línea del mismo comando save??

Saludos y muchas gracias, :wink:
Telco
Avatar de Usuario
TELCO71
Perlero nuevo
Perlero nuevo
 
Mensajes: 48
Registrado: 2006-08-10 10:43 @488
Ubicación: Buenos Aires / Argentina

Notapor explorer » 2007-12-09 18:02 @793

Según el manual de Net::Telnet, login() y cmd() usan las opciones puestas en el prompt para saber si un comando a terminado o no.

Por eso te falla: porque mandas el save con cmd() y Net::Telnet espera un prompt al final, pero claro, nunca llega.

El propio manual (sección What To Know Before Using) dice que hay que usar print() y waitfor() como alternativa a cmd() y login() cuando estos no hacen lo que queremos :-)

Esa es la solución: debes enviar un print() en lugar del cmd(), y luego haces un waitfor() esperando el "Y/N". Y luego mandas el "Y".
Última edición por explorer el 2007-12-10 09:36 @441, editado 2 veces en total
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor TELCO71 » 2007-12-10 08:23 @391

¡¡¡ Excelenteeee Explorer !!! :lol:
Ya puedo grabar la configuración de los equipos. :D

Muchas gracias por tu ayuda :wink:
Telco
Avatar de Usuario
TELCO71
Perlero nuevo
Perlero nuevo
 
Mensajes: 48
Registrado: 2006-08-10 10:43 @488
Ubicación: Buenos Aires / Argentina


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados