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