Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python call function from user input [duplicate]

Tags:

python

Can you call functions from user input? 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.

like image 449
Henkhooft Avatar asked Apr 27 '26 17:04

Henkhooft


2 Answers

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".

like image 152
Blue Peppers Avatar answered Apr 30 '26 03:04

Blue Peppers


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.

like image 45
senderle Avatar answered Apr 30 '26 02:04

senderle