[Tutor] Input to python executable code and design question

Kent Johnson kent37 at tds.net
Mon Jan 10 02:18:44 CET 2005


You can you the exec statement to execute Python code from a string. The string could be from user 
input. So for example a user could input 'x*x' and you could do
  >>> inp = 'x*x'
  >>> func='def f(x): return ' + inp
  >>> func
'def f(x): return x*x'
  >>> exec func
  >>> f(3)
9

Now you have f(x) defined as a regular function and you can plot it the same as a function you wrote 
in your code.

The user will have to use whatever variable name you expect. And this is a huge security hole, you 
shouldn't do it if you don't trust the users.

Kent

Ismael Garrido wrote:
> Hello
> 
> I am trying to make a program that will plot functions. For that, I need 
> to be able to get an input (the function to be plotted) and execute it. 
> So, my question is, how do I use the input? I have found no way to 
> convert the string to some kind of executable code.
> 
> I did research the problem. And found two things, first, an 
> unsatisfactory solution from: 
> http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/52217
> The code there, by means I cannot understand at all, executes a string 
> as code. To be usable I have to make my code a huge string. It is not 
> very elegant.
> 
> The second possible solution I found was using eval, compile and/or 
> exec. But I do not understand what do they do, or how to use them, for 
> the matter.
> 
> Related to the program I intend to do, which design would you say is 
> more intelligent: one that first calculates the whole function, stores 
> it, and then plots it; or one that calculates-plots-calc.-plot, and so on?
> 
> Thanks for any information, and for your time.
> Ismael
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
> 


More information about the Tutor mailing list