0

我想做以下事情。脚本有一些 python 代码作为字符串(保存在变量中),是否可以运行该代码?

好吧,我知道一种方法,将该字符串写入文件并运行它,但我不想要那样。在不创建任何额外文件的情况下,是否可以运行它?

这是一个例子:

假设我的 python 文件有以下内容

#this is a main python file
content = ''' print 'hello!'
                   print 'this is from sub python code' '''
print 'from main python'

内容字符串有一个 python 代码 & 我想运行它。是否可以 ?

希望我清楚。谢谢 !

4

4 回答 4

2

我会提前说:这是一个糟糕的想法,并且取决于字符串的来源,存在严重的安全风险。

顺便说一句,python 有一个 exec 函数,它执行包含 python 代码的字符串。例如:

exec("print 2+2")

编辑:我最初在我的答案中使用了 eval ,这对于评估单个表达式很有用,而 exec 可用于更一般地执行字符串中的任意 python 代码。

相关文档:

http://docs.python.org/2/reference/simple_stmts.html#exec

http://docs.python.org/2/library/functions.html#eval

于 2013-01-19T04:19:46.110 回答
0

那么你可以使用eval

eval(content)

这会做你想做的事,但不建议这样做,特别是如果其他人控制内容content- 如果你有入侵你的系统并不难eval

于 2013-01-19T04:20:06.450 回答
0

您是否按照应该执行的文档尝试使用 exec 方法

执行“打印'你好,世界!'”

于 2013-01-19T04:21:17.800 回答
0

根据您尝试执行的代码,您可以使用eval()exec。这两个选项之间有几个区别:

  1. eval()做它应该做的:它评估一个表达式并返回一个值,而不是执行代码。这意味着您可以调用函数、做一些算术运算,甚至使用列表推导、生成器或 lambda,但不能执行不是表达式的 Python 语句(例如if,在 Python 2 中, for, print;然而,在 Python 3print中是一个函数并且没问题) .
  2. eval()接受比字符串更多的参数。它得到localsglobals,两个字典,定义范围环境。如果您填写这些字典并将其传递给eval(). 可能,您甚至可以通过正确设置__builtins__全局变量来重新定义内置函数。http://docs.python.org/2/library/functions.html#eval
  3. exec也接受全局变量和本地变量。请参阅http://docs.python.org/2/reference/simple_stmts.html#exec。它可以执行一切。而且几乎不可能让它变得相对安全。
于 2013-01-19T04:46:41.500 回答