Foros del Web » Programación para mayores de 30 ;) » Programación General »

Resultado de system() guardarlo en variable?

Estas en el tema de Resultado de system() guardarlo en variable? en el foro de Programación General en Foros del Web. Buenas, No consigo guardar en esta variable el resultado de ejecutar el ls y contar las lineas que salieron, siempre tiene valor 0 la variable ...
  #1 (permalink)  
Antiguo 24/06/2010, 05:18
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Resultado de system() guardarlo en variable?

Buenas,

No consigo guardar en esta variable el resultado de ejecutar el ls y contar las lineas que salieron, siempre tiene valor 0 la variable $existe.

Estoy haciendo mal el system() ?

Lo que hace en lugar de guardar el resultado en $existe, es mostrar el resultado por pantalla...

Código PERL:
Ver original
  1. sub Existe_Awstats {
  2.     my $existe = system("ls /etc/awstats/web/ | grep $DOMINIO | wc -l");
  3.     print $existe;
  4.     if ($existe = 0){
  5.         print "NO hay fichero\n";
  6.     }else{ print "EXISTE un fichero\n"}
  7. }

Alguna idea?

Muchas gracias de antemano!
  #2 (permalink)  
Antiguo 25/06/2010, 06:26
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 524
Antigüedad: 17 años, 11 meses
Puntos: 11
Respuesta: Resultado de system() guardarlo en variable?

system(), en Perl, devuelve el valor del estatus del resultado de la operación, no la salida de la operación.

Eso lo hace qx():

Código Perl:
Ver original
  1. my $existe = grep { /$DOMINIO/ } qx(ls /etc/awstats/web/);
  2. if ($existe == 0){
  3.     print "NO hay fichero\n";
  4. }
  5. else {
  6.     print "EXISTE al menos un fichero\n";
  7. }

(Atención al '=' dentro de la condición: lo tenías puesto como una asignación, por lo que siempre valía 0)

Al asignar la lista de valores que devuelve grep{} a una variable escalar, la lista se convierte en el número de líneas.

Si la función debe devolver un verdadero o falso si hay ficheros o no, te vale con un
Código Perl:
Ver original
  1. sub Existe_Awstats {
  2.     return grep { /$DOMINIO/ } qx(ls /etc/awstats/web/);
  3. }

o incluso, si sabemos que los ficheros, dentro de /etc/awstats/web/, empiezan por el nombre de cada $DOMINIO, lo siguiente también podría funcionar:
Código Perl:
Ver original
  1. sub Existe_Awstats {
  2.     return </etc/awstats/web/$DOMINIO*>;
  3. }
y así, no necesitas ejecutar ningún otro comando externo.
__________________
JF^D Perl Programming en Español
  #3 (permalink)  
Antiguo 25/06/2010, 06:53
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Resultado de system() guardarlo en variable?

Muchas gracias funcionó a la perfección :)

Lo único que no consigo que me liste las coincidencias en caso de que existan los ficheros

Código PERL:
Ver original
  1. my $DOMINIO=$ARGV[0];
  2.  
  3.  
  4. if (!Existe_Awstats) {
  5.     print "NO existe\n";
  6. }else{
  7.     print "Existe\n";
  8.     `ls /etc/awstats/web/ | grep $DOMINIO`
  9. }

Que hago mal? no me muestra nada por pantalla, tengo que utilizar esta orden para que funcione.

system("ls /etc/awstats/web/ | grep $DOMINIO")

Saludos!
  #4 (permalink)  
Antiguo 25/06/2010, 07:49
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 524
Antigüedad: 17 años, 11 meses
Puntos: 11
Respuesta: Resultado de system() guardarlo en variable?

Te vale con guardarlos en una variable array:

Código Perl:
Ver original
  1. my $DOMINIO = shift @ARGV;
  2. my @ficheros = Existe_Awstats($DOMINIO);
  3.  
  4. if (@ficheros) {
  5.     print "Existe: @ficheros\n";
  6. }
  7. else {
  8.     print "No existe\n";
  9. }
  10.  
  11. sub Existe_Awstats {
  12.     my $DOMINIO = shift;
  13.     return grep { /$DOMINIO/ } qx(ls /etc/awstats/web/);
  14. }
__________________
JF^D Perl Programming en Español

Última edición por jferrero; 25/06/2010 a las 08:11
  #5 (permalink)  
Antiguo 25/06/2010, 08:04
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Resultado de system() guardarlo en variable?

Cita:
Iniciado por jferrero Ver Mensaje
Te vale con guardarlos en una variable array:

Código Perl:
Ver original
  1. my @ficheros = Existe_Awstats();
  2.  
  3. if (@ficheros) {
  4.     print "Existe: @ficheros\n";
  5. }
  6. else {
  7.     print "No existe\n";
  8. }
  9.  
  10. sub Existe_Awstats {
  11.     return grep { /$DOMINIO/ } qx(ls /etc/awstats/web/);
  12. }
Entendido, muchas gracias

Etiquetas: system, resultados, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:18.