【问题标题】:Dump Contents of Python Module loaded in memory转储内存中加载的 Python 模块的内容
【发布时间】:2010-07-22 23:13:14
【问题描述】:

我运行了 Python REPL 工具并导入了一个 Python 模块。我可以将该模块的内容转储到文件中吗?这可能吗?提前致谢。

【问题讨论】:

    标签: python module


    【解决方案1】:

    你想用什么格式写文件?如果您想要与导入的完全相同的格式,那并不难——但基本上它是通过文件到文件的副本来完成的。例如,如果有问题的模块名为blah,您可以这样做:

    >>> import shutil
    >>> shutil.copy(blah.__file__, '/tmp/blahblah.pyc')
    

    【讨论】:

    • 如果模块已加载,但该模块的文件已被删除,是否可以复制该模块?
    • 不起作用? import itertools; print itertools.__file__ 得到 AttributeError: 'module' object has no attribute '__file__
    • 这仅适用于作为文件(源代码或字节码)存在的模块;如果文件从未存在过(而只是作为存在于动态库中的机器代码,或作为链接到 Python 可执行文件的机器代码)或在加载后已被删除,则无法创建(或重新创建)根据内存内容“从头开始”文件。
    【解决方案2】:

    你的意思是这样的吗?

    http://www.datamech.com/devan/trypython/trypython.py
    

    我认为这是不可能的,因为这是一个非常受限的环境。
    __file__ 属性是伪造的,因此不会映射到真实文件

    【讨论】:

    • 我正在我机器的控制台上运行 repl。加载模块后,我删除了模块的目录。有没有办法在没有物理文件的情况下复制模块的内容?
    • @Bobby,不,没有办法以这种方式从删除错误中恢复。
    【解决方案3】:

    您可以通过获取对模块对象的引用来开始:

    modobject = __import__("modulename")
    

    不幸的是,这些是不可腌制的。您也许可以遍历dir(modobject) 并获得一些很好的信息来捕获错误...或者是dir(modobject) 本身的字符串表示您想要什么?

    【讨论】:

      猜你喜欢
      • 2017-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-13
      • 2012-12-18
      • 1970-01-01
      • 2013-09-07
      • 1970-01-01
      相关资源
      最近更新 更多