• Publicidad

Problemas con la salida estándar

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Problemas con la salida estándar

Notapor Oberon » 2013-04-29 05:56 @289

Hola a todos.

Me ha surgido un pequeño problema con una aplicación que estoy programando en Perl, utilizando Eclipse + Epic.
Estoy realizando unos cálculos y me interesa indicar, de forma muy sencilla, el progreso mientras el programa se está ejecutando. Simplemente con que vaya dibujando una línea del tipo "********" me conformo.

Así, he hecho, algo simple del tipo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. sub evaluaAli
  2. {
  3.         ...
  4.         for (my $i=0; $i<scalar(@species)-1; $i++)
  5.         {
  6.                 for(my $j=$i+1;$j<scalar(@species);$j++)
  7.                         {
  8.                         ...
  9.                         }      
  10.                 print "**"; #dibuja el progreso
  11.         }
  12.         print "\n Hecho \n";
  13.         return
  14. }
  15.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Cuando lo ejecuto, en el terminal de la plataforma eclipse me aparece todo de manera correcta. Quiero decir, cada vez que se ejecuta el bucle, escribe "**" por lo que la barra se va rellenando poco a poco.
Sin embargo, cuando lo ejecuto sobre el terminal de Linux, no aparece nada hasta que la subrutina finaliza, momento en que aparece la "barra" entera de golpe.
¿Alguien sabe a qué puede deberse esto?
¡Gracias por la atención!
:)
Oberon
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2013-04-29 05:40 @278

Publicidad

Re: Problemas con la salida estándar

Notapor explorer » 2013-04-29 06:50 @326

Bienvenido a los foros de Perl en Español, Oberon.

Es porque la salida estándar está siendo almacenada en un búfer temporal, y cuando se cierra el archivo o se llena el búfer, sale de golpe.

Es exactamente a como funciona el proceso de lectura y escritura de archivos en disco, solo que para Unix, la salida estándar a pantalla es como si fuese otro archivo.

Lo que hay que decirle al sistema es que no use ese búfer, y que las salidas se "escriban" inmediatamente.

Al principio del programa, escribe esto:

$| = 1;

Más información en tu propio ordenador en perldoc perlvar, y en la Web (traducido al español).

Alternativamente, para hacer barras de progreso (y depuración de variables y mucho más), se suele usar el módulo Smart::Comments. La línea 4 quedaría así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.         for (my $i=0; $i<scalar(@species)-1; $i++)  ### Progreso***     hecho
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
y el módulo se encargaría de lo demás.

Casi mejor, ponerlo así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.         for my $i ( 0 .. $#species-1 )  ### Progreso***     hecho
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
ya que es más preciso.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Problemas con la salida estándar

Notapor Oberon » 2013-04-29 09:10 @424

Suponía que era algo del buffer pero no sabía como vaciarlo.
Soy bastante novato con Perl, y resolver este tipo de cuestiones me hace perder mucho tiempo.
¡Muchísimas gracias y un saludo!
;)
Oberon
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2013-04-29 05:40 @278


Volver a Intermedio

¿Quién está conectado?

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