Python call function from user input [duplicate]
Can you call functions from user inp开发者_C百科ut? Something like this:
def testfunction(function):
function()
a = raw_input("fill in function name: "
testfunction(a)
So if you fill in an existing function it will execute it.
What you are doing is bad bad bad :P However, it's perfectly possible.
a = raw_input("Fill in function name:")
if a in locals().keys() and callable(locals()['a']):
locals()['a']()
else:
print 'Function not found'
locals()
returns a dictionary of all the objects currently avalible, and their names. So when we say a in locals().keys()
we are saying, "Is there any object called ". If there is, we then get it by doing locals()['a']
and then test if it is a function using callable
. If that is True
aswell, then we call the function. If it is not, we simply print "Function not found"
.
I would probably encapsulate this kind of behavior in a class:
class UserExec(object):
def __init__(self):
self.msg = "hello"
def get_command(self):
command = str(raw_input("Enter a command: "))
if not hasattr(self, command):
print "%s is not a valid command" % command
else:
getattr(self, command)()
def print_msg(self):
print self.msg
a = UserExec()
a.get_command()
As others have said, this is a security risk, but the more control you have over the input, the less of a risk it is; putting it in a class that includes careful input vetting helps.
Yes you can, though this is generally a bad idea and a big security risk.
def testfunc(fn):
fn()
funcname = raw_input('Enter the name of a function')
if callable(globals()[funcname]):
testfunc(globals()[funcname])
精彩评论