Tengo una tarea computacionalmente costosa en Perl, y me gustaría informar al usuario que el cálculo está en curso mediante la impresión de un período después de que se complete cada parte del cálculo. Desafortunadamente, hasta que imprima "\ n", ninguno de mis períodos se imprime. ¿Cómo puedo abordar esto?¿Cómo puedo imprimir texto inmediatamente sin esperar una nueva línea en Perl?
Respuesta
Debe configurar autoflush para STDOUT. Ejemplo:
use IO::Handle;
STDOUT->autoflush(1);
foreach (1..20) {
print '.';
sleep(1);
}
configure $|=1
antes de comenzar a imprimir. P.ej.
perl -e ' $|=1; foreach (1..10) { print "$_ "; sleep(1); }'
+1, porque alguien marcó una solución de trabajo hacia abajo. –
@ar, 'STDOUT-> autoflush (1)' es lo mismo que '$ | = 1' excepto' $ | = 1', es global y 'STDOUT-> autoflush (1)' es específico de un manejador. –
Excepto que tienes que hacer un 'uso IO :: Handle'. No es que 'IO :: Handle' no haya sido un módulo estándar durante eones, pero ... sí. : (' –
Ver las preguntas frecuentes y How do I flush/unbuffer an output filehandle? Why must I do this? nota:
Además de la variable especial
$|
, puede utilizarbinmode
para darle a su gestor de archivo de una capa:unix
, que es sin búfer ...
Para el problema general, es posible que desee consultar Time::Progress:
%b
%B
barra de progreso que se parece a:
##############......................
Un excelente artículo que debe leer: Suffering from Buffering?
Lo que funcionó para mí fue poner la línea
STDOUT->autoflush(1);
antes de mi línea de
print ".";
dentro de mi bucle existente. No usé el sueño por miedo a desacelerar aún más las cosas.
- 1. ¿Cómo puedo imprimir solo una nueva línea de Unix en Perl en Win32?
- 2. ¿Cómo puedo imprimir una nueva línea correctamente en Haskell?
- 3. ¿Cómo imprimir prolijamente una nueva línea en Groovy?
- 4. ¿Cómo puedo imprimir en la misma línea?
- 5. Nueva línea en texto alternativo
- 6. ¿Cómo puedo obtener la entrada del usuario sin esperar a entrar en Perl?
- 7. ¿Cómo reemplazar inmediatamente la tostada actual por una segunda sin esperar a que la actual termine?
- 8. ¿Cómo puedo comentar solo parte de una línea en Perl?
- 9. Imprimir sin nueva línea en la función no funciona como debería en Python
- 10. Consola MongoDB: ¿imprimir en la consola sin una nueva línea final?
- 11. Cómo imprimir una cadena utilizando pl/sql sin agregar el carácter de nueva línea al final
- 12. NSLog sin línea nueva
- 13. Imprimir nueva línea en TextBlock en Windows 8
- 14. ¿Cómo puedo hacer una nueva referencia hash vacía en Perl?
- 15. Java: Actualización de texto en la línea de comandos sin una nueva línea
- 16. Imprimir en la misma línea y no en una nueva línea en python
- 17. ¿Puedo usar imprimir en Raphael sin Cufon?
- 18. Imprimir nueva línea en PHP en comillas simples
- 19. Cómo imprimir todos los valores de una matriz en Perl
- 20. RoR: Cómo obtener una línea vacía/nueva en un correo electrónico de texto sin formato
- 21. ¿Cómo puedo encapsular una cadena en Perl?
- 22. ¿Cómo puedo imprimir el contenido de un hash en Perl?
- 23. Perl Term :: ReadKey no espere la nueva línea
- 24. Cómo agregar una nueva línea a JLabel sin usar HTML
- 25. ¿Cómo puedo imprimir elementos de lista separados por alimentaciones de línea en Perl?
- 26. ¿Cómo puedo imprimir sobre la línea actual en una aplicación de línea de comando?
- 27. ¿Cómo puedo permitir solo shift + enter para devolver una nueva línea en el área de texto?
- 28. Cómo imprimir una nueva línea en un script de MS-DOS?
- 29. ¿Cómo puedo imprimir el número de línea de origen en Perl?
- 30. Cómo imprimir las variables en Perl
@Hans No vincule con copias no autorizadas de libros. –
Vea http://oreilly.com/catalog/9780596003135 y http://oreilly.com/catalog/9780596003135. –
Lo siento, simplemente apareció cuando Busqué en la web. Ahora eliminé el enlace. –