动态执行 Python 代码的多种方法

# 定义一个字典来存储局部变量local_vars = {}
# 动态生成要执行的代码code = """def example_function(x):    if x > 0:        return x * 2    else:        return -x
result = example_function(10)"""
# 使用 exec() 执行代码,并将结果存储在 local_vars 中exec(code, {}, local_vars)
# 从 local_vars 中提取结果result = local_vars.get('result')
print(result)  # 输出:20

图片

避免缩进问题

图片

1. 使用三引号字符串

图片

# 定义要执行的多行代码字符串code = """def example_function(x):    if x > 0:        return x * 2    else:        return -x
result = example_function(10)"""
# 使用 exec() 执行代码,并将结果存储在 local_vars 中exec(code, {}, local_vars)

2. 动态生成代码字符串时调整缩进

图片

# 动态生成要执行的代码行code_lines = [    "def example_function(x):",    "    if x > 0:",    "        return x * 2",    "    else:",    "        return -x",    "",    "result = example_function(10)"]
# 将代码行合并成一个字符串code = "n".join(code_lines)
# 使用 exec() 执行代码,并将结果存储在 local_vars 中exec(code, {}, local_vars)

3. 使用 textwrap.dedent 调整缩进

图片

import textwrap
# 使用 textwrap.dedent 调整多行字符串的缩进code = textwrap.dedent("""    def example_function(x):        if x > 0:            return x * 2        else:            return -x
    result = example_function(10)""")
# 使用 exec() 执行代码,并将结果存储在 local_vars 中exec(code, {}, local_vars)

执行 Python 文件

图片

1. 使用 exec 读取并执行文件内容

图片

# 定义文件路径file_path = 'path/to/your_file.py'
# 定义一个字典来存储局部变量local_vars = {}
# 读取文件内容with open(file_path, 'r') as file:    code = file.read()
# 使用 exec() 执行文件内容,并将结果存储在 local_vars 中exec(code, {}, local_vars)
# 从 local_vars 中提取结果(假设文件中定义了一个变量 result)result = local_vars.get('result')
print(result)

2. 使用 importlib 动态导入模块

图片

import importlib.utilimport sys
def exec_py_file(file_path):    # 定义模块名    module_name = 'dynamic_module'
    # 动态导入模块    spec = importlib.util.spec_from_file_location(module_name, file_path)    module = importlib.util.module_from_spec(spec)    sys.modules[module_name] = module    spec.loader.exec_module(module)
    return module
# 使用 exec_py_file 执行文件内容module = exec_py_file('path/to/your_file.py')
# 从模块中提取结果(假设文件中定义了一个变量 result)result = getattr(module, 'result', None)
print(result)

3. 使用 runpy 运行模块

图片

import runpy
# 定义文件路径file_path = 'path/to/your_file.py'
# 使用 runpy 运行文件内容,并获取返回的命名空间namespace = runpy.run_path(file_path)
# 从命名空间中提取结果(假设文件中定义了一个变量 result)result = namespace.get('result')
print(result)

4. 使用 subprocess 执行脚本

图片

import subprocess
# 定义文件路径file_path = 'path/to/your_file.py'
# 使用 subprocess 运行文件内容result = subprocess.run(['python', file_path], capture_output=True, text=True)
# 输出结果print(result.stdout)print(result.stderr)

结论

图片

原创文章,作者:guozi,如若转载,请注明出处:https://www.sudun.com/ask/90966.html

(0)
guozi's avatarguozi
上一篇 2024年6月7日 下午1:58
下一篇 2024年6月7日 下午2:01

相关推荐

  • 堡垒机有哪些品牌及其型号?

    今天,我们要探讨的是一个备受关注的话题——堡垒机。作为网络互联网服务器行业中的一种重要设备,堡垒机在保障网络安全方面发挥着重要作用。那么,你是否也想了解堡垒机有哪些品牌及其型号?它…

    行业资讯 2024年4月21日
    0
  • 南昌网站推广优化,南昌网络推广

    随着社交媒体的兴起,它已成为重要的宣传渠道。通过在微博、微信、QQ空间等社交平台发布与网站推广相关的内容,可以吸引更多用户的关注和分享,扩大网站的影响力。 3、内容营销 内容营销是…

    行业资讯 2024年3月26日
    0
  • 搬瓦工端口测试,搬瓦工测试

    在控制面板页面,找到我的服务栏,点击我的产品/服务,即可查看您已购买的VPS服务器列表。找到您要查看的VPS服务器,点击进入。 第5步:复制您的专属链接 您可以在VPS服务器详情页…

    行业资讯 2024年5月8日
    0
  • 宽带接入服务器的功能有哪些呢

    你知道宽带接入服务器有哪些功能吗?随着互联网的发展,网络行业也越来越受到关注。作为网络行业中重要的一部分,宽带接入服务器承担着连接用户和网络的重要任务。那么,什么是宽带接入服务器?…

    行业资讯 2024年4月13日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注