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

Python3执行二进制字符串格式命令时变量赋值不生效如何解决?

问题原因

exec()执行赋值操作有严格的命名空间作用规则:默认在函数内部调用exec()时,所有赋值操作都会作用于该函数的局部命名空间,函数执行结束后局部命名空间会被销毁,因此赋值的变量无法在全局作用域访问到。

解决方案

你可以根据使用场景选择以下任意一种方案:

  • 方案1:显式指定exec使用全局命名空间
    给exec()传入第二、第三个参数为全局命名空间字典,让赋值操作直接作用于全局:
    def execbin(cmd):
        # 第二个参数为全局命名空间,第三个参数为局部命名空间,都设为globals()即可
        exec(cmd.decode('ascii'), globals(), globals()) 
    
    conn = remote(url, port) # 来自pwntools库
    execbin(conn.recvline(keepends=False))
    
    执行完成后即可在全局直接访问赋值的变量。
  • 方案2:直接在全局作用域执行exec,不封装函数
    避免函数局部命名空间的影响,适合简单执行场景:
    conn = remote(url, port)
    cmd = conn.recvline(keepends=False).decode('ascii')
    exec(cmd)
    
  • 方案3:用自定义字典存储赋值变量,不污染全局命名空间
    如果不想和现有全局变量重名冲突,可以单独用字典接收赋值结果:
    var_pool = {}
    def execbin(cmd, pool):
        exec(cmd.decode('ascii'), pool, pool)
    
    conn = remote(url, port)
    execbin(conn.recvline(keepends=False), var_pool)
    # 后续通过var_pool['b']即可访问到赋值的3156
    

注意:直接执行从远程端获取的代码存在极高的安全风险,仅可在完全信任远程端的测试、调试场景下使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:45:03