我想做以下事情。脚本有一些python代码作为字符串(保存在变量中),是否可以运行该代码?
嗯,我知道一种方法,将该字符串写入文件&运行它,但我不希望这样。无需创建任何额外文件,是否可以运行它?
这是一个例子:
让我们假设我的python文件有以下内容
#this is a main python file
content = ''' print 'hello!'
print 'this is from sub python code' '''
print 'from main python'
内容字符串有一个python代码&我想跑它。可能吗 ?
希望我很清楚。谢谢!答案 0 :(得分:2)
我会在前面说这个:这是一个可怕的想法,并且根据字符串的来源存在严重的安全风险。
免责声明,python有一个执行包含python代码的字符串的exec函数。例如:
exec("print 2+2")
编辑:我最初在我的答案中使用了eval,这对于评估单个表达式很有用,而exec可以用于在字符串中更一般地执行任意python代码。
相关文档:
答案 1 :(得分:0)
你可以使用eval
:
eval(content)
这会做你想要的,但不推荐,特别是如果其他人控制content
的内容 - 如果你eval
答案 2 :(得分:0)
您是否按照应该执行的文档尝试了exec方法
exec“print'Hello,World!'”
答案 3 :(得分:0)
根据您尝试执行的代码,您可以使用eval()
或exec
。这两个选项有几个不同之处:
eval()
做它应该做的事情:它评估一个表达式并返回一个值,而不是执行代码。这意味着你可以调用函数,做一些算术,甚至使用列表推导,生成器或lambda,但不能执行不是表达式的python语句(例如if
,for
,{{1}在Python 2中;但是,在Python 3中print
是一个函数并且没问题。print
接受的参数多于字符串。它得到eval()
和locals
两个字典,用于定义范围环境。如果填写并将这些词典传递给globals
,您可以对不受信任的字符串进行近似(但不是真的)安全评估。也许,您甚至可以通过在全局变量中正确设置eval()
来重新定义内置函数。 http://docs.python.org/2/library/functions.html#eval __builtins__
也接受全局和本地人。见http://docs.python.org/2/reference/simple_stmts.html#exec。它可能会执行一切。并且几乎不可能使它甚至相对安全。