On 09/12/12 11:56, Jabba Laci wrote: >> For example: >> >> def install_java(): >> pass >> >> def install_tomcat(): >> pass > > Thanks for the answers. I decided to use numbers in the name of the > functions to facilitate function calls. Now if you have this menu > option for instance: > > (5) install mc > > You can type just "5" as user input and step_5() is called > automatically. If I use descriptive names like install_java() then > selecting a menu point would be more difficult. And I don't want users > to type "java", I want to stick to simple numbers.
You can do something like the below that I tossed together in a couple minutes. It sniffs for globals callables (usually functions, though could be objects with a __call__ method) that are named "install_*" and then maps the user's numeric answer to the corresponding function and calls it. -tkc import sys PREFIX = "install_" def install_java(*args, **kwargs): print "Java!" def install_tomcat(*args, **kwargs): print "Tomcat!" def install_mc(*args, **kwargs): print "mc!" def install_exit(*args, **kwargs): sys.exit(0) functions = [ (name, value) for name, value in sorted(globals().items()) if name.startswith(PREFIX) and callable(value) ] dispatch = dict( (i+1, value) for i, (name, value) in enumerate(functions) ) for i, (name, value) in enumerate(functions): print("%i) %s" % (i+1, name[len(PREFIX):])) while True: choice = raw_input("Choose to install/quit: ") try: i = int(choice) except: continue if i in dispatch: dispatch[i]("some args") else: print("Please choose a valid option") -- http://mail.python.org/mailman/listinfo/python-list