我如何在Python中执行一个包含Python代码的字符串?

14 浏览
0 Comments

我如何在Python中执行一个包含Python代码的字符串?

如何在Python中执行包含Python代码的字符串?


绝不要在可以以任何形式从程序外部获取数据的数据上使用eval(或exec)。这是一个重大的安全风险。您允许数据的作者在您的计算机上运行任意代码。如果您在这里是因为想按照某种模式在您的Python程序中创建多个变量,您几乎肯定有一个XY问题。根本不要创建这些变量——而是适当地使用列表或字典

admin 更改状态以发布 2023年5月23日
0
0 Comments

在这个例子中,使用exec函数将字符串作为代码执行。\n

import sys
import StringIO
# create file-like string to capture output
codeOut = StringIO.StringIO()
codeErr = StringIO.StringIO()
code = """
def f(x):
    x = x + 1
    return x
print 'This is my output.'
"""
# capture output and errors
sys.stdout = codeOut
sys.stderr = codeErr
exec code
# restore stdout and stderr
sys.stdout = sys.__stdout__
sys.stderr = sys.__stderr__
print f(4)
s = codeErr.getvalue()
print "error:\n%s\n" % s
s = codeOut.getvalue()
print "output:\n%s" % s
codeOut.close()
codeErr.close()

0
0 Comments

对于语句, 可以使用exec(string) (Python 2/3) 或exec string (Python 2):

>>> my_code = 'print("hello world")'
>>> exec(my_code)
Hello world

当你需要一个表达式的值时,可以使用eval(string)

>>> x = eval("2+2")
>>> x
4

但是,首先应该问问自己是否真的需要。执行代码通常应该是最后的选择:它很慢、难看且如果可以包含用户输入的代码则是危险的。你应该总是首先查看替代方案,例如高阶函数,看看它们是否可以更好地满足你的需求。

0