• Publicidad

Ejecutar un script perl desde otro script perl

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

Ejecutar un script perl desde otro script perl

Notapor electronicvibes » 2006-08-23 04:36 @233

Hola Buenas soy principiante en perl, estoy realizando un script que me saque unas determinadas configuraciones de routers (TELDAT,CISCO...),ya he realizado una serie de scripts que creen estas configuraciones, y el problema que tengo que al intentar ejecutar estos scripts desde el que estoy creando me da el siguiente error
Can't locate object method "perl" via package "Conf837" (perhaps you forgot to load "Conf837"?) at /usr/local/bin/Prueba.pl line 18.

A ver si me podeis echar una mano.

GRACIAS!!!!
electronicvibes
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2006-08-23 04:26 @226

Publicidad

Notapor explorer » 2006-08-23 07:20 @347

¿Y dónde está el código? No lo veo...
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 kidd » 2006-08-23 11:00 @500

Hola:

Como dice explorer, no te podemos ayudar si no vemos el código para checar que puede estar mal.

Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor electronicvibes » 2006-08-24 01:04 @086

Aqui os dejo el codigo, ya he comprobado que el nombre de los otros scripts es correcto y estos scripts se encuentran en el directorio /usr/local/bin.

Código: Seleccionar todo
#!/usr/bin/env perl
print "Que tipo de router vas a configurar (CISCO  TELDAT) \n";
$router=<STDIN>;
chop($router);
if ($router eq "CISCO")
   {
       print "Que modelo de router vas a configurar (837  1841  2600) \n";
       $modelo=<STDIN>;
       chop($modelo);
       if ($modelo eq 837)
          {
               print "Con que protocolo de enrutamiento (RIP  EIGRP)\n";
               $prot=<STDIN>;
               chop($prot);
               if ($prot eq "EIGRP")
                   {
                    perl Conf837-eigrp.pl;
                   }

               elsif ($prot eq "RIP")
                   {
                     perl Conf837-RIP.sh;
                   }
               else
                   {
                     print "El protocolo de enrutamiento no es correcto\n";
                   }
          }
      elsif ($modelo eq 1841)
          {
            print "1841_EIGRP"
          }
      elsif ($modelo eq 2600)
          {
              print"Introduce los 4 digitos de la sucursal\n";
              $C_2600=<STDIN>;
              print "2600_",$C_2600;
          }
   }
elsif ($router eq "TELDAT")
{
  print "TELDAT_C4";
}




A ver si podeis ayudar, que ya no se que hacer.

Gracias
electronicvibes
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2006-08-23 04:26 @226

Notapor explorer » 2006-08-24 06:27 @310

Primero, no creo que if ($modelo eq 837) sea muy correcto... estás comparando dos strings, pero el segundo es un número. Mejor ponerlo así: if ($modelo eq '837') . Y así unos cuantos 'if' más. que funciona como lo tienes puesto, porque Perl hace una conversión del número 837 a string... pero... es raro verlo así.

Segundo, para ejecutar un script dentro de otro, es lo mismo que ejecutar cualquier otro programa. Necesitas ponerlo con las backticks o con el operador qx(): qx(perl Conf837-eigrp.pl);. Recuerda que esto es Perl, no es Bash :-)

Con do también se puede ejecutar código Perl, pero lo hace, no como un programa aparte, sino que interpreta el código como perteneciente al programa actual. En algunos casos, como ficheros de configuración, es muy útil.
Última edición por explorer el 2006-08-25 04:45 @240, editado 1 vez 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 electronicvibes » 2006-08-25 01:22 @099

Muchas Gracias Explorer, has resuelto mi problema, ya puedo seguir desarrollando el script. Una ultima pregunta si en vez de ejecutar otro script en perl, quisisera ejecutar un script en shell, que tendria que hacer.

Sabeis un manual bueno de perl donde pueda hacer todas estas consultas.




Gracias por todo
electronicvibes
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2006-08-23 04:26 @226

Notapor explorer » 2006-08-25 04:51 @243

Tienes que hacer lo mismo: qx(script_en_shell.sh);.

En cuanto al manual, creo que estas cosas se comentan en el "Learning Perl", pero no estoy seguro...

Desde luego, aquí también se solucionan :-)
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 electronicvibes » 2006-08-28 02:33 @147

Muchas gracias por la ayuda explorer, pero no consigo ejecutar los scripts, cuando tendria que ejecutarlos el programa, se queda como pillao, y despues de dar un par de intros, vuelve a la linea de comandos, os vuelvo a dejar el codigo, por si tuviera algun error. Seguro que hay algo que no estoy haciendo bien.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/env perl
print "Que tipo de router vas a configurar (CISCO  TELDAT) \n";
$router=<STDIN>;
chop($router);
if ($router eq "CISCO")
   {
       print "Que modelo de router vas a configurar (837  1841  2600) \n";
       $modelo=<STDIN>;
       chop($modelo);
       if ($modelo eq 837)
          {
               print "Con que protocolo de enrutamiento (RIP  EIGRP)\n";
               $prot=<STDIN>;
               chop($prot);
               if ($prot eq "EIGRP")
                   {
                   qx (shell Conf837-EIGRP.sh);
                   }

               elsif ($prot eq RIP)
                   {
                   qx(Conf837-RIP.sh);
                   }
               else
                   {
                     print "El protocolo de enrutamiento no es correcto\n";
                   }
          }
      elsif ($modelo eq 1841)
          {
            qx (Conf1841FR-EIGRP.sh);
          }
      elsif ($modelo eq 2600)
          {
              print"Introduce los 4 digitos de la sucursal\n";
              $C_2600=<STDIN>;
              print "2600_",$C_2600;
          }
   }
elsif ($router eq "TELDAT")
{
  qx(ConfigC4.sh);  
}
else
{
print "Nosotros no configuramos   ",$router;
print "\n\n";
}
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
electronicvibes
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2006-08-23 04:26 @226

Notapor explorer » 2006-08-28 09:00 @417

Dentro de qx( ) debes poner el mismo comando que tu pondrías en la línea de comandos para ejecutar los scripts en shell. Eso quiere decir que es posible que tengas que poner la ruta completa a los scripts, si la ruta no está incluida en el $PATH.

Por otra parte, para acceder por telnet a otras máquinas, es mejor usar el módulo Net::Telnet. En este foro hay varios ejemplos de uso con ese módulo.
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


Volver a Básico

¿Quién está conectado?

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

cron