我有用 C 编写的 Python 扩展模块。我想在这个 C 代码中使用标准 Python 模块之一,例如os
或shutil
. 如何最好地做到这一点?
问问题
1440 次
2 回答
8
PyObject* os = PyImport_ImportModuleNoBlock("os");
if (os == NULL)
return NULL;
someattr = PyObject_GetAttrString(os, "someattr");
Py_DECREF(os);
如果您只导入一次模块,例如在init_yourmodule()
函数中,则使用PyImport_ImportModule("os")
.
于 2012-02-11T18:07:35.160 回答
2
不。
相反,更改您的扩展模块,使其为 Python 提供服务,然后编写调用 和您的模块的 Pythonos
代码shutil
。
事实上,对于os
模块中的许多内容,编写本机 C 代码可能比调用 Python 更好。
当然,您可以从 C 代码中调用 Python 模块os
,只是这样做对于像and之类的低级模块来说太过分了shutil
。当涉及到文件复制方法时,shutil
在 C 代码中重新实现它们是微不足道的。事实上,在 Windows 上,复制文件是通过调用操作系统来完成的,因此甚至用 C 编写的代码也不多。
如果 Python 模块是用 C 编写的,您甚至可以只复制所需方法的代码。
于 2012-02-11T04:46:26.817 回答