Jue Ago 16, 2007 7:13 am
|
 |
zozo666
Perlero Frecuente

|
Registrado: 26 May 2007
Mensajes: 139
|
|
| Pasar varibles de CGI a CGI |
|
|
Hola Perleros, quisiera hacerle una consulta, tengo el siguiente código en un CGI llamado paso2.cgi:
| Perl: | $t->param(( 'css' => $css,
'js' => $js,
'percent_completed' => '<font id="percent">0%</font>',
'files_uploaded' => '<font id="files">0</font>',
'data_uploaded' => '<font id="current">0</font>',
'data_total' => $totalKB,
'time_spent' => '<font id="time">0</font>',
'speed' => '<font id="speed">0</font>',
'time_left' => '<font id="left">0</font>',
'inline' => $cgi->param('inline') ? 1 : 0,
)); |
Bueno, lo que necesitaría es alguna forma de pasar la variable $totalKB a un CGI aparte, o sea de este script le envie la información al otro Script, y bueno, este último se encargará de hacer lo que tenga que hacer.
Entonces, ¿cómo establezco una comunicación entre script y script? Muchas Gracias |
|
|
|

Jue Ago 16, 2007 7:15 am
|
 |
kidd
Creador de Perl en Español

|
Registrado: 15 Oct 2003
Mensajes: 1390
Ubicación: México
|
|
|
|

Jue Ago 16, 2007 8:01 am
|
 |
zozo666
Perlero Frecuente

|
Registrado: 26 May 2007
Mensajes: 139
|
|
|
|
|
Gracias, pero no es lo que necesito.
Necesitaría en sí una forma en la que el CGI que recibe los datos se ejecute solamente una vez, ya que ya tiene una ejecución que le manda otro archivo, por eso lo que necesitaría es una suerte de VARIABLE GLOBAL que la pueda leer el CGI al que le envío los datos y que también esté en el CGI que la hace. Tengo el siguiente código para ver si sirve:
| Perl: | for (1.. 3) {
last if -e $flength_file;
sleep 1;
}
&DisplayMessage ("No File") unless (-e $flength_file); # No temp files => Upload already finished
my ($total, $ftime) = &getTotalSize ($flength_file);
my $totalKB = int($total/ 1024); # Total file size in Kilobytes
$js =~ s/<TMPL_VAR data_total>/ $totalKB/e;
if ($c-> {template_file } && !-e $c-> {template_file }) {
print "Invalid template filename";
exit;
}
my $t = HTML:: Template-> new( filename => "$c->{templates_dir}/$tmpl_file",
die_on_bad_params => 0, );
$t-> param(( 'css' => $css,
'js' => $js,
'percent_completed' => '<font id="percent">0%</font>',
'files_uploaded' => '<font id="files">0</font>',
'data_uploaded' => '<font id="current">0</font>',
'data_total' => $totalKB,
'time_spent' => '<font id="time">0</font>',
'speed' => '<font id="speed">0</font>',
'time_left' => '<font id="left">0</font>',
'inline' => $cgi-> param('inline') ? 1 : 0,
));
print $t-> output; |
Bueno, con esto muestro lo pasos que seguiría el script para armar el $totalKB, el tema ahora es pasar esta variable a otro script que se encarga de varias cosas, entre ellas de escribir una base de datos, por lo tanto, no lo puedo ejecutar dos veces. |
|

Jue Ago 16, 2007 8:53 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
|
|
|
|
|
Pues ejecútalo con un system()...
Si esperas algún valor devuelto en la salida estándar de cgi2.pl, usa qx().
Y si es la última instrucción del cgi1, puedes hacerlo también con un exec(). |
|
Jue Ago 16, 2007 11:10 am
|
 |
kidd
Creador de Perl en Español

|
Registrado: 15 Oct 2003
Mensajes: 1390
Ubicación: México
|
|
|
|

Jue Ago 16, 2007 11:21 am
|
 |
Perl user
Maestro Honorario

|
Registrado: 03 Nov 2004
Mensajes: 385
|
|
|
|
|
Qué tal,
Si sólo es pasar una simple variable a otro proceso, pues utilizar system() podría ser "conveniente". Sin embargo, para intercambiar información entre procesos eso es poco eficiente (genera un proceso en cada petición) aparte que suena muy "ad-hoc".
Una mejor solución es utilizando algún mecanismo de comunicación entre procesos, en este caso mi recomendación es utilizar "shared memory". Este mecanismo permite compartir una región de memoria entre uno o mas procesos, de manera eficiente podrás pasar cualquier mensaje entre uno o mas procesos.
Échale un ojo al espacio de nombres IPC:: hay varios módulos que destacan para ello.
Saludos, |
|
Powered by phpBB © 2001, 2005 phpBB Group
|