Проверьте, встроен ли переводчик

0

Я создаю бинарный модуль Python, используя API Python C. Также я создаю отдельную программу, которая использует API Python C и запускает некоторые скрипты python, где этот модуль может использоваться. Вопрос в том, как проверить (используя API Python C), загружен ли мой модуль внутри интерпретатора python по умолчанию внутри моей программы? Я не рассматриваю использование глобальных статических переменных в моем модуле, потому что моя программа ничего не знает об этом модуле. Теперь я использую функцию Py_SetProgramName в своей программе:

Py_SetProgramName("myprogram");

И проверьте его внутри моего модуля:

bool isEmbedded = Py_GetProgramName() == std::string("myprogram");

Он отлично работает, но мне тоже не нравится. Существуют ли какие-либо другие подходы к решению этой проблемы?

  • 3
    Из любопытства, почему это имеет значение?
  • 0
    Этот вопрос помечен C, но вы идете и используете std::string ...
Показать ещё 1 комментарий
Теги:

1 ответ

1

Я бы не стал проверять. Я бы сделал, чтобы программа встраивания создала виртуальный модуль, который содержит дополнительные функции, с внешним модулем, пытающимся импортировать этот модуль и обезвредить себя, или иметь функции, которые модуль будет пытаться загрузить, а затем вызвать через функцию указатели. Если внутренний модуль не может импортироваться или функции не могут быть загружены, дополнительные функции будут недоступны, и модуль будет работать с уменьшенной способностью.

  • 0
    Хорошая мысль, но мне нужно иметь как минимум два интерфейса Python - мою программу и оригинальный интерпретатор Python и один модуль - мой модуль. Это обязательно.
  • 1
    Да. И ваш модуль пытается извлечь дополнительную функциональность из исполняемого файла. Если это невозможно, т. Е. Он выполняется под исполняемым файлом Python или другим исполняемым файлом, который не обеспечивает эту функциональность, то ему придется обойтись без него.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню