Файл Python/C “defs” - что это?

В привязке 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*")
)

Теперь я вижу то, что делает большинство из них (например, которые длятся, каждый подразумевает, что я могу назвать метод "get_mime_type" на объекте "FileInfo"). Но я хотел бы знать: каков этот файл, точно (т.е. что я ищу сеть узнать больше информации)? Действительно ли это - общая вещь найти в привязке Python/C? Каков формат, и где он документируется? Какая программа на самом деле обрабатывает его?

(До сих пор мне удалось подобрать это, это преобразовывается в исходный файл C, и это немного походит на шепелявость мне.)

5
задан detly 26 April 2010 в 08:37
поделиться

2 ответа

Чтобы ответить на ваш вопрос "Какая программа на самом деле его обрабатывает?" вопрос:

Из Makefile.in в каталоге src команда, переводящая файл .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)

Итак, программа, которая его обрабатывает, представляет собой сценарий Python, называемый codegen .py, который, по-видимому, имеет некоторую связь с PyGTK . Теперь поиск в Google по запросу PyGTK codegen дает мне эту ссылку в качестве первого совпадения, в котором говорится:

«PyGTK-Codegen - это система для автоматического создания оболочек для взаимодействия кода GTK с Python »

, а также приводит несколько примеров.

По поводу: «Что это за формат, и где он задокументирован?». Как говорили другие, код очень похож на простую схему. Я не смог найти никакой документации по codegen на сайте PyGTK; это похоже на один из многих темных уголков открытого исходного кода, который плохо документирован. Лучше всего, вероятно, загрузить последнюю версию tarball для PyGTK , просмотреть исходники файла codegen.py и посмотреть, содержит ли сам файл достаточную документацию.

3
ответ дан 14 December 2019 в 13:30
поделиться

Все, что вам нужно для создания привязок Python для кода C, - это использовать Python / C API . Однако API может быть несколько повторяющимся и избыточным, поэтому для их создания могут использоваться различные формы автоматизации. Например, вы могли слышать о swig . LISP-подобный (Scheme) код, который вы видите, представляет собой просто файл конфигурации для PyGTK-Codegen , аналогичной программы автоматизации для создания привязок к Python.

3
ответ дан 14 December 2019 в 13:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: