I’m writing an interpreter for an old in-game scripting language, and so need to compile dictionary that has the name of the command from the language matched up against the symbol for that function.
Now, I’ve already figured out here: How to call a function based on list entry?
…That you can call functions this way, and I know that you can use dir to get a list of strings of all functions in a module. I’ve been able to get this list, and using a regex, removed the built-in commands and anything else I don’t actually want the script to be able to call. The goal is to sandbox here. 🙂
Now that I have the list of items that are defined in the module, I need to get the symbol for each definition.
For a more visual representation, this is the test module I want to get the symbol for:
def notify(stack,mufenv):
print stack[-1]
It’s pulled in via an init script, and I am able to get the notify function’s name in a list using:
import mufprims
import re
moddefs=dir(mufprims)
primsfilter=re.compile('__.+__')
primslist=[ 'mufprims.' + x for x in dir(mufprims) if not primsfilter.match(x) ]
print primslist
This returns:
['mufprims.notify']
…which is the exact name of the function I wish to find the symbol for.
I read over http://docs.python.org/library/symtable.html here, but I’m not sure I understand it. I think this is the key to what I want, but I didn’t see an example that I could understand. Any ideas how I would get the symbol for the functions I’ve pulled from the list?
You want to get the function from the
mufprimsmodule by using getattr and the function name. Like so: