• Publicidad

Nombre de script que invoca a otro script

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

Nombre de script que invoca a otro script

Notapor Logan » 2010-01-21 11:18 @512

Hola.

¿Es posible saber desde qué script está siendo ejecutado un script de Perl?

Ejemplo: En mi script padre.pl llamo a mi script hijo.pl, ¿cómo puedo saber en hijo.pl el nombre del script que lo llamó?

Gracias
Avatar de Usuario
Logan
Perlero Nuevo
Perlero Nuevo
 
Mensajes: 5
Registrado: 2005-11-07 14:06 @629

Publicidad

Re: Nombre de script que invoca a otro script

Notapor erv-Z » 2010-01-21 13:19 @596

No entendí bien, pero bueno.

Para saber el nombre del script que se está ejecutando se usa $0. Ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
print "perl $0\n";
__END__
perl t.pl
Coloreado en 0.007 segundos, usando GeSHi 1.0.8.4


Saludos.
erv-Z
Perlero Frecuente
Perlero Frecuente
 
Mensajes: 158
Registrado: 2009-07-25 13:00 @583

Re: Nombre de script que invoca a otro script

Notapor explorer » 2010-01-21 13:26 @601

No, no es eso...

Está preguntando si, dado un programa Perl que llama a otro programa Perl, ¿cómo sabe el segundo programa el nombre del primero?

Dicho de otra manera: ¿cómo sabe un proceso hijo el nombre de su padre?

Esto lo he mirado en perlvar, y me parece que la solución depende mucho del sistema operativo.
JF^D Perl Programming
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 13930
Registrado: 2005-07-24 18:12 @800
Ubicación: Madrid, España

Re: Nombre de script que invoca a otro script

Notapor explorer » 2010-01-21 13:44 @614

Esta es una posibilidad, para Linux:

Programa uno.pl
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. system("./dos.pl");  # ejecutamos el segundo
Coloreado en 0.007 segundos, usando GeSHi 1.0.8.4

Programa dos.pl
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. my $padre_id = getppid();
  3. my $cmdline = qx(cat /proc/$padre_id/cmdline);  # valores separados por \0
  4. my @cmdline = split /\0/, $cmdline;
  5. print join q[ ], @cmdline;                      # /usr/bin/perl ./uno.pl
Coloreado en 0.008 segundos, usando GeSHi 1.0.8.4


getppid() devuelve el pid del proceso padre que ejecutó al nuestro. Y de ahí accedemos a su información.
JF^D Perl Programming
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 13930
Registrado: 2005-07-24 18:12 @800
Ubicación: Madrid, España

Re: Nombre de script que invoca a otro script

Notapor Logan » 2010-01-21 17:02 @752

Hola explorer.

Muchas gracias por tu respuesta, copié el código escribiste y tengo una duda en la siguiente línea:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $cmdline = qx(cat /proc/$padre_id/cmdline);  # valores separados por \0
Coloreado en 0.007 segundos, usando GeSHi 1.0.8.4


ya que me marca el siguiente error:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
cat: cannot open /proc/20897/cmdline
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
el directorio /proc/20897/ sí existe pero cmdline no. ¿A qué se debe, cuál es el problema?

Gracias, saludos
Avatar de Usuario
Logan
Perlero Nuevo
Perlero Nuevo
 
Mensajes: 5
Registrado: 2005-11-07 14:06 @629

Re: Nombre de script que invoca a otro script

Notapor explorer » 2010-01-21 17:24 @767

Pues no lo sé... tengo varios Linux a mi alrededor:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
2.6.18-6-686 #1 SMP, Debian 4         : sí lo tiene
2.6.22.18-0.2-default, OpenSuse 10.3  : sí lo tiene
2.6.21-omap1, Nokia Maemo 2008        : sí lo tiene
2.6.28-omap1, Nokia Maemo 5           : sí lo tiene
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Es posible que sea debido al número de versión del kernel.
JF^D Perl Programming
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 13930
Registrado: 2005-07-24 18:12 @800
Ubicación: Madrid, España

Re: Nombre de script que invoca a otro script

Notapor salva » 2010-01-21 18:02 @793

El módulo Proc::ProcessTable permite acceder a la información de los procesos de manera compatible.
Avatar de Usuario
salva
Perlero Adicto
Perlero Adicto
 
Mensajes: 200
Registrado: 2008-01-03 15:19 @680

Re: Nombre de script que invoca a otro script

Notapor morago » 2010-01-22 15:52 @703

La opción de salva es buena:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use Proc::ProcessTable;
  2.  
  3. $tp = new Proc::ProcessTable;
  4.  
  5. foreach $p ( @{$tp->table} )
  6.    { print $p->cmndline if ( $p->pid =~ /$padre_id/ ); }
  7.  
Coloreado en 0.007 segundos, usando GeSHi 1.0.8.4
Avatar de Usuario
morago
Perlero Nuevo
Perlero Nuevo
 
Mensajes: 10
Registrado: 2009-12-13 16:43 @738

Re: Nombre de script que invoca a otro script

Notapor salva » 2010-01-22 17:23 @766

morago escribiste:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$p->pid =~ /$padre_id/
Coloreado en 0.006 segundos, usando GeSHi 1.0.8.4

!Ten cuidado con esa expresión regular que podría encajar con cosas que no son la que estás buscando! O la anclas o usas simplemente
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$p->pid == $padre_id
Coloreado en 0.006 segundos, usando GeSHi 1.0.8.4
Avatar de Usuario
salva
Perlero Adicto
Perlero Adicto
 
Mensajes: 200
Registrado: 2008-01-03 15:19 @680

Re: Nombre de script que invoca a otro script

Notapor Logan » 2010-01-22 18:32 @814

Hola, muchas gracias. El sistema operativo que manejo es Solaris 5.10. Con obtener el id del proceso me fue posible obtener el nombre utilizando el siguiente comando de sistema operativo.
Sintáxis: [ Descargar ] [ Ocultar ]
  1. ps -ef 


Gracias a todos. :)
Avatar de Usuario
Logan
Perlero Nuevo
Perlero Nuevo
 
Mensajes: 5
Registrado: 2005-11-07 14:06 @629


Volver a Básico

¿Quién está conectado?

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