动态执行 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
  • 东莞推广公司,东莞推广抖音获客系统

    你听说过“东莞促销”这个词吗?这是网站建设和设计行业的一个重要概念,也是许多公司的基本要素。那么什么是网站推广?为什么要在网站上进行推广呢?如何选择合适的推广策略?具体的推广步骤和…

    行业资讯 2024年4月20日
    0
  • 云存储空间怎么使用?

    云存储空间,这个在网络互联网服务器行业中备受瞩目的话题,到底是什么?为什么如今越来越多的人开始使用它?如何选择适合自己的云存储空间?又该如何使用它进行数据备份和共享?或许你对这些问…

    行业资讯 2024年4月17日
    0
  • 元神受损怎么办,元神墙壁怎么打破

    为避免原神组件被屏蔽的问题,建议玩家在购买游戏前了解当地的互联网政策并选择合法的购买渠道。同时,您还可以使用VPN等工具来保证游戏的正常访问和进行。 希望大家了解原神组件被屏蔽的原…

    行业资讯 2024年5月11日
    0

发表回复

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