5

我有用 C 编写的 Python 扩展模块。我想在这个 C 代码中使用标准 Python 模块之一,例如osshutil. 如何最好地做到这一点?

4

2 回答 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 回答