Tenía la misma pregunta. Hay un buscapersonas integrado en el pydoc module. Lo incorporé de esta manera (que me parece hackoso e insatisfactorio ... aunque estoy abierto a mejores ideas).
Me gusta la idea de que sería una página automática si hay más de x resultados y la paginación está activada, lo que es posible implementar, pero no se hace aquí.
import cmd
from pydoc import pager
from cStringIO import StringIO
import sys
PAGER = True
class Commander(cmd.Cmd):
prompt = "> "
def do_pager(self,line):
global PAGER
line = line + " 1"
tokens = line.lower().split()
if tokens[0] in ("on","true","t", "1"):
PAGER = True
print "# setting PAGER True"
elif tokens[0] in ("off","false","f","0"):
PAGER = False
print "# setting PAGER False"
else:
print "# can't set pager: don't know -> %s" % tokens[0]
def do_demo(self,line):
results = dict(a=1,b=2,c=3)
self.format_commandline_results(results)
def format_commandline_results(self,results):
if PAGER:
ofh = StringIO()
else:
ofh = sys.stdout
for (k,v) in sorted(results.items()):
print >> ofh, "%s -> %s" % (k,v)
if PAGER:
ofh.seek(0)
pager(ofh.read())
return None
def do_EOF(self,line):
print "",
return True
if __name__ == "__main__":
Commander().cmdloop("# try: \n> pager off \n> demo \n> pager on \n> demo \n\n")
Gracias, pero la canalización a través de menos evitaría la interacción, que es el objetivo del módulo cmd. La implementación de una solución de curses va más allá del primer borrador que quiero construir con el módulo cmd. Sin embargo, su solución print_and_wait es un buen comienzo (aunque no funcionó). – Gra