【问题标题】:Python/C "defs" file - what is it?Python/C“defs”文件——它是什么?
【发布时间】:2010-04-26 08:37:52
【问题描述】:

在 nautilus-python 绑定中,有一个文件“nautilus.defs”。它包含像

这样的节
(define-interface MenuProvider
  (in-module "Nautilus")
  (c-name "NautilusMenuProvider")
  (gtype-id "NAUTILUS_TYPE_MENU_PROVIDER")
)

(define-method get_mime_type
  (of-object "NautilusFileInfo")
  (c-name "nautilus_file_info_get_mime_type")
  (return-type "char*")
)

现在我可以看到其中大多数都做了什么(例如,最后一个意味着我可以在“FileInfo”对象上调用方法“get_mime_type”)。但我想知道:这个文件到底是什么(即我在网上搜索什么以了解更多信息)?在 Python/C 绑定中找到常见的东西吗?格式是什么,记录在哪里?什么程序实际处理它?

(到目前为止,我已经设法收集到它得到了transformed into a C source file,它在我看来有点像 lisp。)

【问题讨论】:

    标签: python c


    【解决方案1】:

    回答您的“实际处理它的程序是什么?”问题:

    src目录中的Makefile.in,将.defs文件翻译成C的命令是PYGTK_CODEGEN。要找出PYGTK_CODEGEN 是什么,请查看顶级configure.in 文件,其中包含以下几行:

    AC_MSG_CHECKING(for pygtk codegen)
    PYGTK_CODEGEN="$PYTHON `$PKG_CONFIG --variable=codegendir pygtk-2.0`/codegen.py"
    AC_SUBST(PYGTK_CODEGEN)
    AC_MSG_RESULT($PYGTK_CODEGEN)
    

    所以处理它的程序是一个名为 codegen.py 的 Python 脚本,它显然与 PyGTK 有一些链接。现在谷歌搜索PyGTK codegen 给我this link 作为第一个命中,它说:

    “PyGTK-Codegen 是一个自动生成包装器以将 GTK 代码与 Python 接口的系统。”

    还举了一些例子。

    至于:“格式是什么,它记录在哪里?”。正如其他人所说,代码看起来很像简单的方案。我在 PyGTK 网站上的 codegen 上根本找不到任何文档;这看起来像是没有很好记录的开源的许多黑暗角落之一。最好的办法可能是下载PyGTK 的最新压缩包,查看codegen.py 文件的源代码,看看文件本身是否包含足够的文档。

    【讨论】:

    • Safyan 的回答也很好,但我很欣赏演绎的细分:)
    【解决方案2】:

    为 C 代码创建 Python 绑定只需使用Python / C API。但是,API 可能有些重复和冗余,因此可以使用各种形式的自动化来创建它们。例如,您可能听说过swig。您看到的类似 LISP(方案)的代码只是 PyGTK-Codegen 的配置文件,这是一个类似的用于创建与 Python 的绑定的自动化程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-07
      • 1970-01-01
      • 1970-01-01
      • 2021-10-28
      • 2013-09-25
      • 1970-01-01
      • 2019-05-19
      • 1970-01-01
      相关资源
      最近更新 更多