• Publicidad

Ejecutar un programa antes que otro

¿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 programa antes que otro

Notapor noa86 » 2011-02-15 17:07 @755

Hola,
tengo 2 aplicaciones. Una se ejecuta inicialmente desde un main.cgi
y la otra se ejecuta inicialmente desde nombre.perl.
Uno tiene extensión cgi y otro extensión perl.
Mi pregunta es, como se puede hacer la llamada en código desde el archivo nombre.perl a main.cgi para que si se accede a nombre.perl se direccione a main.cgi a ejecutarse primero?

es decir, lo que quiero hacer es que si ejecuto nombre.perl se redireccione a main.cgi para utilizar esta aplicación que consiste en ingresar con un nombre de usuario y contraseña y luego cuando la validación sea correcta, desde un script (que ya tengo hecho) se redirecciona otra vez a nombre.perl para ejecutar la aplicación.
sin identificarse en definitiva no quiero que se pueda ejecutar nombre.perl.

Gracias
Última edición por noa86 el 2011-02-15 18:23 @808, editado 2 veces en total
noa86
Perlero nuevo
Perlero nuevo
 
Mensajes: 93
Registrado: 2010-11-15 14:43 @655

Publicidad

Re: Ejecutar un programa antes que otro

Notapor explorer » 2011-02-15 18:12 @800

Para ejecutar un código desde otro, puedes usar system() o qx(), dependiendo del resultado que quieras obtener (solo el valor de estado o capturar la salida). También puedes usar open().

Lo normal es que en un CGI, si es necesario que el usuario esté autenticado, ejecute una subrutina o llame a otro proceso para que compruebe esa autenticación.

Pero ese proceso de autenticación hay que hacerlo en todas las llamadas al CGI: cada petición HTTP es distinta.

Se pueden usar técnicas como las que ofrece CGI::Session para guardar una cookie en el lado del usuario, y un fichero de sesión en el lado del servidor, dándonos una gran facilidad para controlar la sesión del usuario. Solo tenemos que registrar en la sesión, que el usuario, efectivamente, está autenticado, para que le demos autorización a pasar al resto del programa.
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

Re: Ejecutar un programa antes que otro

Notapor noa86 » 2011-02-15 18:35 @816

Sí, estoy utilizando CGI::Session en main.cgi, pero el problema lo veo a la hora de integrar una aplicación en la otra.

Me estoy volviendo un poco loca entre tanto código, y no sé cuál sería mejor idea.

Integrar la aplicación nombre.perl en el cgi, que tiene templates a parte, y más código. O hacerlo de modo redireccionamientos. Que si no se ha identificado, se identifique ejecutando main.cgi y luego vuelva a nombre.perl, y si no, se pueda ejecutar nombre.perl...

Igual hay alguna manera más sencilla de hacerlo y yo me estoy complicando...
noa86
Perlero nuevo
Perlero nuevo
 
Mensajes: 93
Registrado: 2010-11-15 14:43 @655

Re: Ejecutar un programa antes que otro

Notapor explorer » 2011-02-16 04:31 @230

Si haces un redireccionamiento, estás creando una nueva petición HTTP.

Si la autenticación crea una sesión, que indique claramente que el usuario está autenticado, entonces sí que te funcionará, porque al entrar en main.cgi y recuperar la sesión, verá que el usuario puede pasar.

Lo normal es que sí haya un procedimiento aparte para realizar la autenticación, presentando un formulario al usuario, pero eso, en buena parte de los programas, consiste en realizar un if(), que separa la parte del programa que presenta ese formulario, del resto.

Más información: CGI::Session::CookBook en la sección "MEMBERS AREA"

Es una sección bastante larga, pero muy detallada, porque da una solución general al proceso de proteger una parte de la web.
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

Re: Ejecutar un programa antes que otro

Notapor noa86 » 2011-02-19 18:16 @803

¿Hay alguna instrucción para poder llamar a un programa Perl del mismo equipo dentro de un código Perl?

Tengo un código perl, nombre.perl, y quiero, dentro del mismo, se llame a otro programa, main.cgi.

Lo que quiero saber es, que línea de código tengo que escribir para que al ejecutar nombre.perl se ejecute main.cgi. ¿Me he explicado?

Otra consulta,

En un archivo .perl, se puede utilizar

use base 'objeto'

siendo objeto un package? ¿Y estando dentro del mismo equipo pero en diferente directorio?
noa86
Perlero nuevo
Perlero nuevo
 
Mensajes: 93
Registrado: 2010-11-15 14:43 @655

Re: Ejecutar un programa antes que otro

Notapor explorer » 2011-02-19 18:28 @811

Te lo he respondido antes: con system(), qx() u open(), según el resultado que quieras obtener de la ejecución.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $resultado_estado = system('/ruta/al/programa/main.cgi');      # obtenemos el estado de la ejecución

my $salida = qx('/ruta/al/programa/main.cgi');                    # obtenemos la salida estándar

open MAIN, '/ruta/al/programa/main.cgi|';                         # ejecutamos main.cgi y podemos leer
my $primera_linea = <MAIN>;                                       # su salida estándar con <MAIN>
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4
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

Re: Ejecutar un programa antes que otro

Notapor explorer » 2011-02-19 19:04 @836

noa86 escribiste:En un archivo .perl, se puede utilizar

use base 'objeto'

siendo objeto un package? ¿Y estando dentro del mismo equipo pero en diferente directorio?
Perl irá a buscar el módulo 'objeto', para crear una relación de herencia entre tu módulo y el módulo indicado en base. El módulo a cargar, naturalmente, deberá estar en alguno de los directorios conocidos por @INC.

Más información en perldoc base.
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

Re: Ejecutar un programa antes que otro

Notapor noa86 » 2011-02-25 12:52 @578

El comando system() yo creo que no me sirve para lo que quiero, ya que lo que quiero hacer es que desde el cogido perl, se redireccione al cgi, que es una página web de identificación con usuario y contraseña utilizando CGI::Session.

Y una vez se identifique, en el template, main.html, aparte de que salga lo que sale quiero introducir el programa Perl, que es otra página web, pero es un programa Perl con el código HTML dentro del mismo, a través de print().

¿Me explico?
noa86
Perlero nuevo
Perlero nuevo
 
Mensajes: 93
Registrado: 2010-11-15 14:43 @655

Re: Ejecutar un programa antes que otro

Notapor explorer » 2011-02-25 13:01 @584

Si lo que quieres es redirigir la petición, te vale con usar una función como redirect() del módulo CGI.

En la documentación del módulo CGI, busca por la sección GENERATING A REDIRECTION HEADER.
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

Re: Ejecutar un programa antes que otro

Notapor noa86 » 2011-02-25 13:31 @605

Ok, eso entendido y en funcionamiento.

Y para introducir dentro del template, main.html el programa Perl, ¿qué es, una página web? Quiero hacer la llamada a un subrutina, que es donde se realiza la ejecución de otras subrutina para cargar toda la página web.

Exactamente, que se cargue dentro del main.html, principal.perl, pero la función, sub main

No quiero en este caso redireccionar, si no cargar dentro de main.html el otro perl.
noa86
Perlero nuevo
Perlero nuevo
 
Mensajes: 93
Registrado: 2010-11-15 14:43 @655

Siguiente

Volver a Básico

¿Quién está conectado?

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