Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Ejecutar un script perl desde otro script perl

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico
Mensaje Mie Ago 23, 2006 3:36 am
electronicvibes
Perlero Nuevo
Perlero Nuevo
Registrado: 23 Ago 2006
Mensajes: 4
Ejecutar un script perl desde otro script perl Responder citando

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!!!!
Mensaje Mie Ago 23, 2006 6:20 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4084
Ubicación: Valladolid, España
Responder citando

¿Y dónde está el código? No lo veo...
Mensaje Mie Ago 23, 2006 10:00 am
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
Responder citando

Hola:

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

Saludos
Mensaje Jue Ago 24, 2006 12:04 am
electronicvibes
Perlero Nuevo
Perlero Nuevo
Registrado: 23 Ago 2006
Mensajes: 4
Responder citando

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:
#!/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
Mensaje Jue Ago 24, 2006 5:27 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4084
Ubicación: Valladolid, España
Responder citando

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 Smile

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.

Ultima edición por explorer el Vie Ago 25, 2006 3:45 am, editado 1 vez
Mensaje Vie Ago 25, 2006 12:22 am
electronicvibes
Perlero Nuevo
Perlero Nuevo
Registrado: 23 Ago 2006
Mensajes: 4
Responder citando

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
Mensaje Vie Ago 25, 2006 3:51 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4084
Ubicación: Valladolid, España
Responder citando

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 Smile
Mensaje Lun Ago 28, 2006 1:33 am
electronicvibes
Perlero Nuevo
Perlero Nuevo
Registrado: 23 Ago 2006
Mensajes: 4
Responder citando

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.

Perl:
#!/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";
}
Mensaje Lun Ago 28, 2006 8:00 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4084
Ubicación: Valladolid, España
Responder citando

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.
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group