2012-02-11 10 views

答えて

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

あなたがPyImport_ImportModule("os")を使用し、その後init_yourmodule()機能では、一度だけ、例えばモジュールをインポートする場合。

1

しないでください。

代わりに、拡張モジュールをPythonにサービスを提供するように変更してから、osshutilおよびモジュールを呼び出すPythonコードを記述します。

実際、osモジュールの多くのコンテンツでは、Pythonに呼び出すのではなく、ネイティブのCコードを記述する方がよいでしょう。

もちろん、それはosshutilのような低レベルのモジュールでは過度のことです。ファイルに関しては、shutilのコピー方法をCコードで再実装するのは簡単です。実際、Windowsでは、ファイルをコピーすることはOSの呼び出しによって行われるため、C言語で書かれるコードはあまりありません。

PythonモジュールがC言語で書かれていると、あなたが必要とする方法。

+2

複雑な拡張モジュールは、stdlibで既に実装されているものを行う必要があることがあります。 C言語で再実装したり、コードを再構築するのは残念です – zaharpopov

関連する問題