我正在使用Python C API创建Python二进制模块。我还创建了一个单独的程序,它使用Python C API并运行一些可能使用模块的python脚本。 问题是如何检查(使用Python C API)我的模块是否在我的程序中的默认python解释器中加载?我不是&# 39;考虑在我的模块中使用全局静态变量,因为我的程序一定不能知道这个模块。 现在我在我的程序中使用Py_SetProgramName函数:
Py_SetProgramName("myprogram");
在我的模块中检查:
bool isEmbedded = Py_GetProgramName() == std::string("myprogram");
它工作正常,但我也不喜欢这种方式。有没有其他方法可以解决这个问题?
答案 0 :(得分:1)
我不会尝试检查。我要做的是让嵌入程序创建一个包含附加功能的虚拟模块,外部模块尝试导入该模块并自行进行monkeypatching,或者让它包含模块将尝试加载然后通过函数调用的函数指针。如果内部模块无法导入或无法加载功能,则附加功能将不可用,模块将以降低功能的方式运行。