Re: crear una sesión interactiva
Medardo Rodriguez
med.swl en gmail.com
Sab Ago 16 22:10:06 CEST 2008
2008/8/16 Jose Caballero <jcaballero.hep en gmail.com>:
> me gustaría desarrollar una aplicación que permita crear una sesión
> interactiva donde los usuarios puedan ejecutar comandos. Algo como esto
>
> $ my_application.py
> my_app > init
> my_app > bla bla bla
> my_app > exit
> $
...
> Si alguien conoce algún link donde pueda ver un ejemplo sencillo, pero que
> sea más o menos profesional (fácil de ampliar en un futuro), estaré más que
> agradecido.
Se me acaba de ocurrir este ejemplo al leer tu correo:
<code>
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Copyright (C) 2008 Medardo Rodriguez
# This is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License; either
# GPL v2 or any later version.
# See the GNU General Public License for more details.
'Este es un ejemplo que acabo de hacer la la lista de Python en Español'
from random import randint
prompt1 = '$ '
prompt2 = '> '
def DoDefault(cmd, args):
'Se ejecuta cuando se entra un comando malo'
answers = ('Usted debe estar bobeando',
'Mire bien lo que escribe',
'Pida ayuda',
'definitivamente no sabe usar una PC')
print prompt2, 'No entiendo el comando «%s» %s' % (cmd, args)
print ' %s' % answers[randint(0, len(answers) - 1)]
def DoSee(args):
'Mira objetos en la habitación actual'
print prompt2, 'Usted está mirando los siguientes objetos: %s' % args
def DoPisi(args):
'Para errores de «mirar»'
print prompt2, '¿Va a orinar o está tratando de ver: %s?' % args
def DoHelp(args):
'Muestra ayuda del sistema'
if args:
print prompt2, 'Este programa no necesita mucha ayuda'
print prompt2, 'Y menos de los comandos: %s' % args
else:
print prompt2, 'Los comandos instalados son:'
for cmds, action in registry:
for cmd in cmds:
print ' * %s' % cmd
print ' %s' % action.__doc__
def DoExit(args):
'Salir del sistema interactivo'
if args:
print prompt2, '«%s» no hacen falta para irse' % args
else:
global exit
print prompt2, 'hasta luego!'
exit = True
registry = ((('mirar', 'ver'), DoSee),
(('miar',), DoPisi),
(('ayuda', 'help', '?'), DoHelp),
(('salir', 'adios', 'quit'), DoExit),
# Registre cuantas otras acciones quiera
)
actions = {}
for cmds, action in registry:
for cmd in cmds:
actions[cmd] = action
def SplitCommand(line):
list = line.split(' ', 1)
return (list[0].lower(), list[1] if len(list) == 2 else '')
if __name__ == '__main__':
print 'Puede pedir «ayuda»'
exit = False
while not exit:
command = raw_input(prompt1).strip()
if command:
cmd, args = SplitCommand(command)
action = actions.get(cmd)
if action:
action(args)
else:
DoDefault(cmd, args)
</code>
Saludos
_______________________________________________
Lista de correo Python-es
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes
Más información sobre la lista de distribución Python-es