Página 1 de 1

Correr runant.pl varias veces automáticamente

NotaPublicado: 2014-02-25 08:34 @398
por dbustos
Hola a todos.

Quiero correr un script (runant.pl) varias veces para lo que simplemente lo puse dentro de un while {}, pero una vez que lo corre una vez sale del loop y termina sin cumplir la condición del while. Entiendo que es básica la forma en que lo hice, pero también es básico mi conocimiento de Perl, ¡je,je!

¡Muchas a todos!

Esto es lo que escribí:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use File::Copy;
  3.  
  4. my $n = 1;
  5.  
  6. while ( $n < 4 ) {
  7.     $oldlocation = "/home/bec/Documents/PINA-WSclient_03072013/proteins$n.input";
  8.     $newlocation = "/home/bec/Documents/PINA-WSclient_03072013/proteins.input";
  9.     copy( $oldlocation, $newlocation );
  10.  
  11.     my $debug = 1;
  12.     use strict;
  13.     my $HOME = $ENV{ANT_HOME};
  14.     if ( $HOME eq "" ) {
  15.         die "\n\nANT_HOME *MUST* be set!\n\n";
  16.     }
  17.  
  18.     my $JAVACMD = $ENV{JAVACMD};
  19.     $JAVACMD = "java" if $JAVACMD eq "";
  20.  
  21.     my $onnetware = 0;
  22.     if ( $^O eq "NetWare" ) {
  23.         $onnetware = 1;
  24.     }
  25.  
  26.     my $oncygwin = ( $^O eq "cygwin" );
  27.  
  28.     my $s = ":";
  29.     if (   ( $^O eq "MSWin32" )
  30.         || ( $^O eq "dos" )
  31.         || ( $^O eq "cygwin" )
  32.         || ( $onnetware == 1 ) ) {
  33.         $s = ";";
  34.     }
  35.  
  36.     my $localpath = "$HOME/lib/ant-launcher.jar";
  37.     my @ANT_OPTS  = split( " ", $ENV{ANT_OPTS} );
  38.     my @ANT_ARGS  = split( " ", $ENV{ANT_ARGS} );
  39.  
  40.     if ( $ENV{JIKESPATH} ne "" ) {
  41.         push @ANT_OPTS, "-Djikes.class.path=$ENV{JIKESPATH}";
  42.     }
  43.  
  44.     my @ARGS;
  45.     push @ARGS, @ANT_OPTS;
  46.  
  47.     my $CYGHOME = "";
  48.  
  49.     my $classpath = $ENV{CLASSPATH};
  50.     if ( $oncygwin == 1 ) {
  51.         $localpath = `cygpath --path --windows $localpath`;
  52.         chomp($localpath);
  53.         if ( !$classpath eq "" ) {
  54.             $classpath = `cygpath --path --windows "$classpath"`;
  55.             chomp($classpath);
  56.         }
  57.         $HOME = `cygpath --path --windows $HOME`;
  58.         chomp($HOME);
  59.         $CYGHOME = `cygpath --path --windows $ENV{HOME}`;
  60.         chomp($CYGHOME);
  61.     }
  62.     push @ARGS, "-classpath", "$localpath";
  63.     push @ARGS, "-Dant.home=$HOME";
  64.     if ( !$CYGHOME eq "" ) {
  65.         push @ARGS, "-Dcygwin.user.home=\"$CYGHOME\"";
  66.     }
  67.     push @ARGS, "org.apache.tools.ant.launch.Launcher", @ANT_ARGS;
  68.     push @ARGS, @ARGV;
  69.     if ( !$classpath eq "" ) {
  70.         if ( $onnetware == 1 ) {
  71.             push @ARGS, "-lib", "\$CLASSPATH";
  72.         }
  73.         else {
  74.             push @ARGS, "-lib", "$classpath";
  75.         }
  76.     }
  77.     print "\n $JAVACMD @ARGS\n\n" if ($debug);
  78.  
  79.     my $returnValue = system $JAVACMD, @ARGS;
  80.     if ( $returnValue eq 0 ) {
  81.         exit 0;
  82.     }
  83.     else {
  84.         exit 1;
  85.     }
  86.  
  87.     $n++;
  88. }
  89.  
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4

Re: Correr runant.pl varias veces automáticamente

NotaPublicado: 2014-02-25 13:21 @598
por Aceitunas
Desde la línea 80 a la 85:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. if ($returnValue eq 0)
  2.     {
  3.     exit 0;
  4.     }
  5. else
  6.     {
  7.     exit 1;
  8.     }
  9.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


:roll: :lol:

Re: correr runant.pl varias veces automaticamente

NotaPublicado: 2014-02-25 13:33 @606
por dbustos
Si elimino el $n++ de la línea 87, entonces ¿cómo se repite 4 veces (hasta que se cumpla la condición n < 4?

Re: correr runant.pl varias veces automaticamente

NotaPublicado: 2014-02-25 13:41 @612
por Aceitunas
El problema es que tu programa acaba en la línea 82 u 86 con exit.

Yo lo que haría en vez de hacer la chapuza del bucle sería hacer otro script que lo ejecute 4 veces, ejemplo:

Para Windows.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. system("archivo.pl");
  2. system("archivo.pl");
  3. system("archivo.pl");
  4. system("archivo.pl");
  5.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Para Linux creo que sería así (no probado).
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. system("/usr/bin/perl archivo.pl");
  2. system("/usr/bin/perl archivo.pl");
  3. system("/usr/bin/perl archivo.pl");
  4. system("/usr/bin/perl archivo.pl");
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Re: Correr runant.pl varias veces automáticamente

NotaPublicado: 2014-02-25 13:49 @617
por dbustos
El problema es que no serían solo 4 veces sino 250 y cada vez lee un input diferente (input1, input2, etc., así hasta 250).

Re: Correr runant.pl varias veces automáticamente

NotaPublicado: 2014-02-25 14:07 @629
por Aceitunas
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $tope = <STDIN>;
  2. my $contador = 1;
  3.  
  4. while ($contador < $tope)
  5. {
  6.     system("archivo.pl");
  7.     $contador++;
  8. }
  9.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Re: Correr runant.pl varias veces automáticamente

NotaPublicado: 2014-02-25 16:46 @740
por explorer
Yo cambiaría estas líneas
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     if ( $returnValue eq 0 ) {
  2.         exit 0;
  3.     }
  4.     else {
  5.         exit 1;
  6.     }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
por estas otras:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     if ( $returnValue == 0 ) {
  2.         print "Ejecución correcta\n";
  3.     }
  4.     else {
  5.         print "Ejecución normal\n";
  6.     }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Re: Correr runant.pl varias veces automáticamente

NotaPublicado: 2014-02-26 08:10 @382
por dbustos
¡Gracias!, ambas soluciones funcionan bien.