2011-02-24 10 views
6

Estoy haciendo una barra de progreso para mi script de carga y por eso quiero imprimir una fila de múltiples '#' pero no puedo hacer que funcione. Cuando le digo a Python que no agregue nueva línea, la elimina pero no funciona como se esperaba en las funciones. El uso de "print ('#', end = '')" en Python 3 o "print '#'," en Python 2 lo elimina pero cuando se ejecuta bajo una función no imprime nada hasta que se termina toda la función, no debería esperar al igual que la impresión normal.Imprimir sin nueva línea en la función no funciona como debería en Python

import time 

i = 0 

def status(): 
    print('#', end='') 

while i < 60: 
    status() 
    time.sleep(1) 
    i += 1 

Esto debería imprimir '#' cada segundo, pero no es así. Los imprime todos después de 60 segundos. El uso de solo imprimir ('#') lo imprime cada segundo como se esperaba. Realmente necesito una solución para esto. ¡Por favor ayuda!

Solución: "sys.stdout.flush()" después de cada impresión :)

+0

¿Por qué intentas reinventar las ruedas? http://pypi.python.org/pypi/fish/ –

+0

Utilizo una solución basada en [this] (http://nadiana.com/animated-terminal-progress-bar-in-python) que es muy buena, imo :) – simon

+0

cosas geniales. Pero mi barra de progreso es en realidad un pene, así que mi solución mínima funciona mejor :) – ggustafsson

Respuesta

0

Probé tu código en el IDLE para 2.5. Así que tuve que usar el formato de impresión como - print '#',

Esto es lo que obtengo cuando lo ejecuto: el sistema imprime el símbolo '#' cada segundo. Al final del ciclo, recibo nuevamente el mensaje IDLE. Entonces me parece que está haciendo lo que espera que haga.

¿Qué versión estás utilizando específicamente? Lo siento, no tengo la versión 3. Así que no puedo probarla allí.

+0

He intentado Python 2.6.1 y Python 3.2 en Terminal.app en OS X. – ggustafsson

0

Siempre puede usar la función strip().

Cuestiones relacionadas