Python调用py代码字符串
已知py代码字符串:
script = """
def hello(msg1, msg2, msg3):
print(f"msg1: {msg1}, msg2: {msg2}, msg3:{msg3}")
return 'success'
"""
如何在Python中直接调用?
方法一:使用 runpy
import runpy
# 定义一个Python脚本字符串
script = """
def hello(msg1, msg2, msg3):
print(f"msg1: {msg1}, msg2: {msg2}, msg3:{msg3}")
return 'success'
"""
# 将脚本字符串写入一个临时文件
with open('temp_script.py', 'w') as file:
file.write(script)
# 使用 runpy 运行这个脚本
script_module = runpy.run_path('temp_script.py')
result = script_module['hello']('hhh',222,3.33)
print(result)
输出结果:
msg1: {msg1}, msg2: {msg2}, msg3:{msg3}
success
方法二:使用 exec
# 定义一个Python脚本字符串
script = """
def hello(msg1, msg2, msg3):
print(f"msg1: {msg1}, msg2: {msg2}, msg3:{msg3}")
return 'success'
"""
# 执行脚本字符串
exec(script)
# 调用 hello 方法并传入参数 "hhh"
result = hello('hhh',222,3.33)
print(result)
输出结果:
msg1: hhh, msg2: 222, msg3:3.33
success
方法三:使用 exec,并使方法名提参
def execute_script(script, func_name, **kwargs):
# 创建一个新的字典来作为脚本的命名空间
namespace = {}
# 在新的命名空间中执行脚本字符串
exec(script, namespace)
# 获取命名空间中的目标函数
func = namespace.get(func_name)
if not func:
raise ValueError(f"Function '{func_name}' not found in the script")
# 调用目标函数并传入参数,返回结果
result = func(**kwargs)
return result
# 定义一个Python脚本字符串
script = """
def hello(msg1, msg2, msg3):
print(f"msg1: {msg1}, msg2: {msg2}, msg3:{msg3}")
return 'success'
"""
# 调用函数并传入参数
result = execute_script(script, 'hello', msg1='aaa', msg2=222, msg3=3.33)
# 打印返回结果
print(result)
输出结果:
msg1: aaa, msg2: 222, msg3:3.33
success