2012-02-11 6 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, а затем записывал код Python, который вызывает os, shutil и ваш модуль.

На самом деле, для большого количества контента в модуле os, вероятно, лучше написать собственный C-код, а не позвонить в Python.

Конечно, you can call Python modules from C code, это просто то, что это слишком много для модулей низкого уровня, таких как os и shutil. Когда дело доходит до методов копирования файлов в shutil, переопределение их в вашем C-коде тривиально. На самом деле, в Windows, копирование файла выполняется путем вызова ОС, поэтому кода для записи не существует.

Если модуль Python написан на языке C, вы даже можете просто скопировать код для методы, которые вам нужны.

+2

Сложные модули расширения иногда должны делать вещи, которые уже были реализованы в stdlib. Стыдно переопределять их на C или реструктурировать код – zaharpopov

Смежные вопросы