On Jun 29, 5:22 pm, MRAB <pyt...@mrabarnett.plus.com> wrote: > rhvonl...@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: > > > Shell.py: > > #! /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 ? > > Shell(sys.argv[1:]) > > 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)() > running foo
Excellent replies, both. I'll get a lot of mileage out of this, thanks! -- http://mail.python.org/mailman/listinfo/python-list