在python脚本中运行python代码

时间:2013-01-19 04:15:45

标签: python

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

嗯,我知道一种方法,将该字符串写入文件&运行它,但我不希望这样。无需创建任何额外文件,是否可以运行它?

这是一个例子:

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

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

内容字符串有一个python代码&我想跑它。可能吗 ?

希望我很清楚。谢谢!

4 个答案:

答案 0 :(得分:2)

我会在前面说这个:这是一个可怕的想法,并且根据字符串的来源存在严重的安全风险。

免责声明,python有一个执行包含python代码的字符串的exec函数。例如:

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

答案 1 :(得分:0)

你可以使用eval

eval(content)

这会做你想要的,但不推荐,特别是如果其他人控制content的内容 - 如果你eval

答案 2 :(得分:0)

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

exec“print'Hello,World!'”

答案 3 :(得分:0)

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

  1. eval()做它应该做的事情:它评估一个表达式并返回一个值,而不是执行代码。这意味着你可以调用函数,做一些算术,甚至使用列表推导,生成器或lambda,但不能执行不是表达式的python语句(例如iffor,{{1}在Python 2中;但是,在Python 3中print是一个函数并且没问题。
  2. print接受的参数多于字符串。它得到eval()locals两个字典,用于定义范围环境。如果填写并将这些词典传递给globals,您可以对不受信任的字符串进行近似(但不是真的)安全评估。也许,您甚至可以通过在全局变量中正确设置eval()来重新定义内置函数。 http://docs.python.org/2/library/functions.html#eval
  3. __builtins__也接受全局和本地人。见http://docs.python.org/2/reference/simple_stmts.html#exec。它可能会执行一切。并且几乎不可能使它甚至相对安全。