problema con print
Joaquin Jose del Cerro Murciano
jjdelcerromurciano en yahoo.es
Mar Jul 12 16:11:43 CEST 2005
El Martes, 12 de Julio de 2005 15:35, muspellheim escribió:
> buenas tardes lista!!
>
> a ver, un tema. Uso el comando print de esta forma:
> print "compilando... ",
> poniendo la coma al final, para que despues de realizar las operaciones,
> si no ha habido error poner un
> print "OK"
>
> Para q al final me quede por pantalla algo así (en la misma linea):
> compilando... OK
>
> El problema es q me escribe la linea al final y a la vez, me explico.
> print "compilando... ",
> if os.system("make"): #Imaginemos que tarda media hora el compilar
> print "ERROR"
> else:
> print "OK"
>
> En vez de poner:
> compilando... (y despues de media hora) OK
> ocurre q saca por pantalla
> (despues de media hora) compilando... OK
> y da la sensación como que se atasca el programa en vez de que sigue
> trabajando (he dicho sensación, ojo, q el programa sigue ejecutándose
> correctamente)
>
> Espero haberme explicado bien. Alguien sabe como solucionarlo??
>
> Creo q una solución cutre sería poner un
> os.system("echo -n 'compilando... '")
> if os.system("make"):
> os.system("echo 'ERROR'")
> else:
> os.system("echo 'OK'")
> pero me interesaría mas si hay alguna forma de hacer esto directamente
> con python
>
> Un saludo
o
Hola,
la solucion es simple, solo pensar que la salida standard, que es la que el
"print" usa por defecto va buffereada, y el buffer se vuelca al dispositivo,
cuando llega un salto de linea ('\n') o cuando se hace un flush de forma
explicita.
Aclarado esto, simplemente tienes que llamar a sys.stdout.flush() en el sitio
apropiado.
Yo normalmente lo suelo hacer asi:
sys.stdout.write("compilando... ")
sys.stdout.flush()
if os.system("make"): #Imaginemos que tarda media hora el compilar
sys.stdout.write("ERROR\n")
else:
sys.stdout.write("OK\n")
Pero podrias usar prints y simplemente añadir la linea del flush tras cada
print que acabe en una "," (sin salto de linea). A mi me dio una vez un dolor
de cabeza con los prints y por eso cuando tengo que hacer un flush uso
stdout.write, pero creo que es una mania fruto de alguna ralladura mia.
Un saludo
Joaquin.
______________________________________________
Renovamos el Correo Yahoo!
Nuevos servicios, más seguridad
http://correo.yahoo.es
Más información sobre la lista de distribución Python-es