using input(), raw_input() to allow user to run different functions
python at mrabarnett.plus.com
Mon Jun 29 18:22:23 EDT 2009
rhvonlehe at gmail.com wrote:
> Something's been giving me difficulty..
> We have a USB-attached device that we frequently debug with simple
> python scripts. The model has always been that each script logs on to
> the device, does something, then logs off. As it turns out, we have
> mostly written scripts as unit tests for each API command. So, we'll
> call one script that will configure a process on the device, and a
> separate script that will retrieve the results of that process.
> The model is changing inside the device such that all settings will be
> lost when we log off. This means we'll have to merge a bunch of
> scripts in various ways.
> I thought it would be neat if I could have one master python script do
> the logon, then allow the user to input the name of a previously-
> written script he wanted to execute while logged on. Finally, when
> exiting the master script, the user would logout from the device.
> I'm trying to test this by using input() or raw_input() to get the
> function the user wants to execute. I'm not having much luck. Here's
> an example:
> #! /usr/bin/env python
> from CollectNDResults import *
> request = input('Script shell >>> ')
> print request
> exec (request) ## I realize the parentheses are not needed
> When I run Shell.py I get this:
> Script shell >>> CollectNDResults
> <function CollectNDResults at 0x00AA75F0>
> Traceback (most recent call last):
> File "./Shell.py", line 35, in ?
> File "./Shell.py", line 24, in Shell
> exec (request)
> TypeError: exec: arg 1 must be a string, file, or code object
> Is there a good reference for me to figure out how to turn my function
> name into the code object that I want to execute? Is there a better
> way to do what I'm trying to do?
>>> def foo():
print "running foo"
>>> import sys
>>> func_name = "foo"
>>> getattr(sys.modules[__name__], func_name)()
More information about the Python-list