You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不创建新文件、不使用exec()及os模块的情况下执行Python代码字符串?

解决方案

核心限制说明

严格禁止使用exec()和任何模块的前提下,Python没有原生途径能在当前文件作用域内执行Base64解码后的语句级代码(比如赋值、函数调用这类)。因为执行字符串形式的语句代码,Python仅提供exec()/eval()这两个内置入口,且Base64解码也需要实现对应逻辑(手动实现可避免模块依赖,但执行代码的核心需求绕不开exec())。

放松exec()限制后的可行方案(仅禁用模块导入)

如果允许使用exec()但不导入任何模块,可按以下步骤实现:

  1. 手动实现无依赖的Base64解码函数
  2. 解码得到代码字符串后,在当前作用域执行
# 手动实现Base64解码,不依赖任何模块
def base64_decode(s):
    base64_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
    padding = s.count('=')
    s = s.rstrip('=')
    bits = 0
    bit_count = 0
    result = []
    for c in s:
        idx = base64_chars.index(c)
        bits = (bits << 6) | idx
        bit_count += 6
        while bit_count >= 8:
            byte = (bits >> (bit_count - 8)) & 0xFF
            result.append(chr(byte))
            bit_count -= 8
    if padding == 1:
        bits >>= 2
        result.append(chr(bits))
    elif padding == 2:
        bits >>= 4
        result.append(chr(bits))
    return ''.join(result)

# 你的Base64编码内容
string_base64 = "eCA9ICJoZWxsbyBmZWxsb3ciCgoKcHJpbnQoeCkKeCA9ICJoZWxsbyBmZWxsb3ciCgoKcHJpbnQoeCkKeCA9ICJoZWxsbyBmZWxsb3ciCgoKcHJpbnQoeCkKeCA9ICJoZWxsbyBmZWxsb3ciCgoKcHJpbnQoeCk="

# 解码获取代码字符串
code_content = base64_decode(string_base64)

# 在当前文件的全局/局部作用域执行代码
exec(code_content, globals(), locals())

完全禁用exec()的极端方案(不推荐)

如果必须彻底禁用exec(),只能通过修改当前模块的字节码实现,这属于高度hacky的操作,依赖Python版本,且极易引发不可控问题,仅用于研究场景,不建议实际使用。

内容的提问来源于stack exchange,提问作者Hof

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 15:10:58