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