在拿到一个策略文件后,如果想要通过exec从策略文件中读取并执行代码,并且给这段代码传递参数,同时捕获其执行结果,可以通过修改全局或局部命名空间来实现。
假设一个strategy.py策略文件:
def calculate_sum(a, b):
return a + b
result = calculate_sum(param1, param2)
在主Python脚本中,可以这样来实现传参和捕获:
# 创建一个全局命名空间字典,用于传递参数和捕获结果
globals_dict = {
'param1': 10, # 传递的参数1
'param2': 20, # 传递的参数2
'result': None # 用于捕获结果的变量,初始化为None
}
# 读取并执行strategy.py中的代码
with open('strategy.py', 'r') as f:
code = f.read()
try:
exec(code, globals_dict) # 传递globals_dict作为全局命名空间
except Exception as e:
print(f"发生了错误: {e}")
else:
# 捕获并打印结果
if 'result' in globals_dict:
print(f"结果是: {globals_dict['result']}")
else:
print("没有结果.")