Mie Ago 23, 2006 3:36 am
|
|
|
| Ejecutar un script perl desde otro script perl |
|
|
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!!!! |
|
|
|
Mie Ago 23, 2006 6:20 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4084
Ubicación: Valladolid, España
|
|
|
|
|
| ¿Y dónde está el código? No lo veo... |
|
Mie Ago 23, 2006 10:00 am
|
 |
kidd
Creador de Perl en Español

|
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
|
|
|
|
|
Hola:
Como dice explorer, no te podemos ayudar si no vemos el código para checar que puede estar mal.
Saludos |
|

Jue Ago 24, 2006 12:04 am
|
|
|
|
|
|
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 |
|

Jue Ago 24, 2006 5:27 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4084
Ubicación: Valladolid, España
|
|
|
|
|
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. 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.
Ultima edición por explorer el Vie Ago 25, 2006 3:45 am, editado 1 vez |
|

Vie Ago 25, 2006 12:22 am
|
|
|
|
|
|
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 |
|
Vie Ago 25, 2006 3:51 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4084
Ubicación: Valladolid, España
|
|
|
|
|
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  |
|

Lun Ago 28, 2006 1:33 am
|
|
|
|
|
|
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";
} |
|
|

Lun Ago 28, 2006 8:00 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4084
Ubicación: Valladolid, España
|
|
|
|
|
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. |
|
Powered by phpBB © 2001, 2005 phpBB Group
|