Una pregunta simple, y otra no tanto
Chema Cortés
ch3m4 en ch3m4.org
Mie Jun 4 16:22:55 CEST 2003
Marcos Sánchez Provencio escribió:
> Si no necesitas multihilo (threads) puedes intentarlo también con el
> módulo select. Éste te permite hacer un bucle de atención a eventos,
> donde rellenarías los huecos con proceso por tu cuenta.
Esta una buena solución que debería figurar en alguno de los
repositorios de recetas de python (responde a una de las preguntas más
frecuentes de python).
El código podría ser algo así:
#!/usr/bin/python
import os, sys
import tty
from select import select
class NotTTYException(Exception): pass
class TerminalFile:
def __init__(self,infile):
if not infile.isatty():
raise NotTTYException()
self.file=infile
#prepare for getch
self.save_attr=tty.tcgetattr(self.file)
newattr=self.save_attr[:]
newattr[3] &= ~tty.ECHO & ~tty.ICANON
tty.tcsetattr(self.file, tty.TCSANOW, newattr)
def __del__(self):
#restoring stdin
import tty #required this import here
tty.tcsetattr(self.file, tty.TCSADRAIN, self.save_attr)
def getch(self):
if select([self.file],[],[],0)[0]:
c=self.file.read(1)
else:
c=''
return c
if __name__=="__main__":
s=TerminalFile(sys.stdin)
print "Press q to quit..."
i=0
while s.getch()!="q":
sys.stdout.write("%08d\r"%i)
i+=1
print "-- END --"
------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es
Más información sobre la lista de distribución Python-es