【问题标题】:Execute binary string of C module执行C模块的二进制字符串
【发布时间】:2020-03-21 14:16:25
【问题描述】:

有人用 Nuitka 为 python 创建了一个 C 模块。 (原始 Python 代码不可用,该模块已经编译 - 所以它是一个机器二进制文件。)我想在另一个工具中使用该代码,该工具仅 Python 文件除外。所以我想将 C 代码包含到 Python 中。

更具体地说:到目前为止,我有文件 thatmodule.pyithatmodule.so。我可以通过在mymodule.py 中运行import thatmodule 将它们包含到我当前的Python 代码中。现在我只想要一个 Python 文件 mymodule.py

我目前的想法是将代码从thatmodule.pyi复制到mymodule.py的开头,并将thatmodule.so转换为二进制字符串

with open('thatmodule.so', mode='rb') as file:
    fileContent = file.read()

... missing ... how to convert fileContent to b'string'...

并将这个二进制字符串放入mymodule.py。然后我必须从我的 python 模块mymodule.py 中执行这个二进制字符串。我该怎么做?

【问题讨论】:

    标签: python python-3.x module nuitka


    【解决方案1】:

    你必须把它写到一个文件中(大概也是.pyi),然后使用python的importlib动态导入它。

    【讨论】:

    • 您能用一个简短的代码示例详细说明吗?另外:我注意到,fileContent 不是二进制字符串,而只是二进制...不知道如何转换。
    • 对不起,我写出来给你写太复杂了,还有很多问题和事情要注意(什么操作系统,什么python版本,你想把它放在哪里,是否应该缓存,文件权限,设置 $PYTHONPATH 等)。这是一个相当高级的python练习。
    • 我不确定您所说的“没有二进制字符串,只有二进制”是什么意思——您可以将它作为(例如)base64 编码的字符串放入您的 python 代码中;见docs.python.org/3/library/base64.html
    【解决方案2】:

    如果您有描述 thatmodule.so 功能的文档,您可以使用以下内容:

    import ctypes
    mylib = ctypes.CDLL("thatmodule.so")
    

    文档here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-05
      • 1970-01-01
      • 2011-08-05
      • 2015-05-26
      • 2017-02-23
      相关资源
      最近更新 更多