如何在Python中执行任意代码?

1 投票
4 回答
3993 浏览
提问于 2025-04-16 18:41

我想在Python中能够从一个字符串中执行任意代码,包括由多个语句组成的代码,以及跨多行的语句。我尝试过的方法是使用execeval,但这些似乎只能处理表达式。我还尝试过使用code.InteractiveInterpreter类,但这也似乎只允许使用evalexec或单行语句的模式。我试着按行拆分代码,但这无法处理跨多行的语句。有没有办法做到这一点呢?

4 个回答

2

为了更好地理解sven所说的内容,使用exec的时候有一个条件部分,可以让你指定一个命名空间来执行代码。比如,当你在全局命名空间中执行代码时,你可以这样做:

exec "code" in globals()

或者,如果你想指定自己的命名空间,可以给它传一个字典。

di = {}
exec "code" in di
3

你能告诉我你在使用 exec 时遇到的问题吗?对我来说,这个似乎是可以正常工作的。

>>> foo = """
... def baz():
...   print "Hello"
... """
>>> 
>>> exec foo
>>> baz()
Hello
>>> 

exec 还有一种 in 的用法,你可以把执行的结果放到一个特定的命名空间里,这样就不会影响到当前的命名空间,避免了混乱。

3

exec 似乎正是你需要的东西:

s = """
for i in range(5):
    print(i)
"""
exec s

打印输出

0
1
2
3
4

eval() 只处理表达式,而 exec 可以处理任意代码。

撰写回答