2012-02-11 80 views

回答

7
PyObject* os = PyImport_ImportModuleNoBlock("os"); 
if (os == NULL) 
    return NULL; 
someattr = PyObject_GetAttrString(os, "someattr"); 
Py_DECREF(os); 

如果導入模塊只有一次例如,在init_yourmodule()功能,然後使用PyImport_ImportModule("os")

1

不要。

相反,改變你的擴展模塊,以便它爲Python提供服務,然後編寫調用osshutil和你的模塊的Python代碼。

實際上,對於os模塊中的很多內容,最好編寫本地C代碼而不是調用Python。

當然,you can call Python modules from C code,只是這樣做對於像osshutil這樣的低級模塊來說是過分的。當談到shutil中的文件複製方法時,在C代碼中重新實現它們是很簡單的。事實上,在Windows上,通過調用操作系統來完成複製文件,所以沒有太多的代碼甚至不需要用C編寫。

如果Python模塊是用C語言編寫的,甚至可以複製代碼你需要的方法。

+2

複雜的擴展模塊有時需要做一些已經在stdlib中實現的東西。在C中重新實現它們或者重構代碼是一件很遺憾的事情 – zaharpopov 2012-02-11 07:37:19