在我的项目中,我有一些用户定义的小型python程序,它们存储在我需要访问主程序中某些变量的文件中——我使用自定义全局列表通过exec()
运行这些程序(以最大限度地减少恶意代码的功能)。然而,虽然传递此列表中的函数似乎有效,但传递主程序的变量无效
主程序:
lessonCorrect = False
safeAccessForLessons = {'__builtins__':{}, 'print':print,
'lessonCorrect':lessonCorrect}
try:
exec("""
print('Found!')
x = 3
y = 4
print(x,y,x+y,x*y)
global lessonCorrect
print(lessonCorrect)
lessonCorrect = True
print(lessonCorrect)""", safeAccessForLessons)
print(lessonCorrect)
except:
print("Blah")
import sys
print(sys.exc_info())
输出:
>>> checkLesson()
Found!
3 4 7 12
False #First print in file
True #Second print in file
False #Print in function
预期产出:
>>> checkLesson()
Found!
3 4 7 12
<unimportant> #First print in file
True #Second print in file
True #Print in function
这里的问题不在于
exec
,而在于如何访问lessonCorrect
变量比如说:
这将输出:
因此,为了回到您的代码,这里的
exec
调用修改了safeAccessForLessons
dict,但从未触及lessonCorrect变量。因此,您不必在checkLesson
中执行print(lessonCorrect)
,而可以执行print(safeAccessForLesssons['lessonCorrect'])
,您将得到您想要的相关问题 更多 >
编程相关推荐