Я создаю бинарный модуль Python, используя API Python C. Также я создаю отдельную программу, которая использует API Python C и запускает некоторые скрипты python, где этот модуль может использоваться. Вопрос в том, как проверить (используя API Python C), загружен ли мой модуль внутри интерпретатора python по умолчанию внутри моей программы? Я не рассматриваю использование глобальных статических переменных в моем модуле, потому что моя программа ничего не знает об этом модуле. Теперь я использую функцию Py_SetProgramName в своей программе:
Py_SetProgramName("myprogram");
И проверьте его внутри моего модуля:
bool isEmbedded = Py_GetProgramName() == std::string("myprogram");
Он отлично работает, но мне тоже не нравится. Существуют ли какие-либо другие подходы к решению этой проблемы?
Я бы не стал проверять. Я бы сделал, чтобы программа встраивания создала виртуальный модуль, который содержит дополнительные функции, с внешним модулем, пытающимся импортировать этот модуль и обезвредить себя, или иметь функции, которые модуль будет пытаться загрузить, а затем вызвать через функцию указатели. Если внутренний модуль не может импортироваться или функции не могут быть загружены, дополнительные функции будут недоступны, и модуль будет работать с уменьшенной способностью.
std::string
...