import curses, sys, traceback, os, subprocess
#Variables globales
class globales:
scrn = None #la pantalla principal
menu = None #la 'caja' de los menus
tecla = None
vent = None
#clases
#funciones
def get_popen(command):
sp = subprocess
return subprocess.Popen(command, stdout=sp.PIPE, stderr=sp.STDOUT)
def readlines(fd):
while 1:
line = fd.readline()
if not line:
break
yield line
def inicializa(stdscr):
globales.scrn = stdscr # curses.initscr() el "wrapper" ya lo inicializa
curses.noecho() #para que no se vean en pantalla las teclas que golpeamos
curses.cbreak() #para no tener que dar a retorno cada vez que se pulsa una tecla
curses.curs_set(0) #para ocultar el cursor
curses.start_color() #para poner colores (aunque no he usado esto)
globales.scrn.clear() #se limpia la pantalla principal
globales.scrn.keypad(1) #para poder leer las teclas de funcion, etc.
globales.scrn.border() #ponemos un borde a la pantalla principal
globales.scrn.refresh() #y pintamos...
def menus():
globales.menu = curses.newwin(3, 78, 1, 1) #creamos la 'caja' de los menús
globales.vent = curses.newwin(19,78,4,1) #creamos la 'caja' de salidas
globales.menu.clear() #limpiamos la caja
globales.menu.border() #le ponemos un borde
globales.menu.addstr(1, 1, "F", curses.A_UNDERLINE)
globales.menu.addstr(1, 2, "ile")
globales.menu.addstr(1, 6, "Q", curses.A_UNDERLINE)
globales.menu.addstr(1, 7, "uit")
globales.menu.refresh() #y pintamos...
while True:
globales.tecla = globales.scrn.getch()
globales.tecla = chr(globales.tecla)
if globales.tecla == 'q':break
if globales.tecla == 'f':
fichero()
def fichero():
globales.files = curses.newwin(4, 10, 3, 1)
globales.files.clear()
globales.files.border()
globales.files.addstr(1, 1, "L", curses.A_UNDERLINE)
globales.files.addstr(1, 2, "ist")
globales.files.addstr(2, 1, "E", curses.A_UNDERLINE)
globales.files.addstr(2, 2, "xit")
globales.files.refresh()
while True:
globales.tecla = globales.scrn.getch()
globales.tecla = chr(globales.tecla)
if globales.tecla == 'e':
globales.files.clear() #limpiamos el menú de ficheros
globales.files.refresh()
globales.scrn.redrawwin() #reescribimos la pantalla principal
globales.scrn.refresh()
globales.menu.redrawwin() #reescribimos la caja de menús
globales.menu.refresh()
globales.vent.redrawwin()
globales.vent.refresh()
break
if globales.tecla == 'l':
command = "ls -lh"
popen = get_popen(command.split())
#vent = curses.newpad(20,78)
globales.vent.border()
globales.vent.addstr(1, 1, "Python curses in action!")
i=1
for line in readlines(popen.stdout):
i += 1
globales.vent.addstr(i, 1, line)
globales.vent.refresh()
globales.files.redrawwin()
globales.files.refresh()
pass
def main(stdscr):
inicializa(stdscr)
menus()
return 0
#principal
if __name__ == '__main__':
curses.wrapper(main)
miércoles, 17 de noviembre de 2010
El programa de "curses" (II)
Ahora con 'subprocess' para que realice una tarea útil (en este caso listar los archivos del directorio actual):
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario