私はチュートリアルに従っています:https://en.wikibooks.org/wiki/Python_Programming/Extending_with_C "Swigの使用"というセクションを参照しています。私は彼の場所にファイルを作成します。私はそれをインポートすることができますなぜ私のモジュールは動作しません?
~/Desktop/TEST2/helloMODULEtest
私が最初にこのコードをinitでhellomodule.cと呼ばれるファイルを作成:私はその後、同じ場所にファイルhello.iを作成
/*hellomodule.c*/
#include <stdio.h>
void say_hello(const char* name) {
printf("Hello %s!\n", name);
}
:
を/*hello.i*/
%module hello
extern void say_hello(const char* name);
私はPiにswigとpython-devをインストールしています。だから、端末内にこれら3行を入力:
$ swig -python hello.i
$ gcc -fpic -c hellomodule.c hello_wrap.c -I/usr/include/python2.7/
$ gcc -shared hellomodule.o hello_wrap.o -o _hello.so -lpython2.7
は私にこれらのファイルを提供します:
- hellomodule.o
- hello.py
- _hello.soを
- hello_wrap.c
- hello_wrap.o
Iその後、sudoをコピーhello.pyと私のpython2.7のlibファイルへ_hello.so:私は、Python 2.7.9シェルすることができますこれらの手順の後
$ sudo cp ~/Desktop/TEST2/helloMODULEtest/hello.py /usr/lib/python2.7
$ sudo cp ~/Desktop/TEST2/helloMODULEtest/_hello.so /usr/lib/python2.7
。シェルでは、タイプ
>>> import hello
と入力し、hello.pyがインポートされたことを示す警告やエラーは表示されません。しかし、入力するとき
>>> hello.say_hello("World")
モジュールは何も返されないと表示され、次の行に進みます。これは、インポートの「対話」であると私は、次のエントリーラインでハローに呼び出す:
>>> import hello
>>> hello.say_hello("World")
>>>
私はこれ見てみたい:だから
>>> import hello
>>> hello.say_hello("World")
Hello World!
>>>
を、私の質問は、なぜ何もありませんhello.pyモジュールから返されますか?これに
あなたの関数は、システムに直接印刷することができると 'PythonのShell'は自動的vaulesは、関数から返された印刷されます。 'printf()'ではなく 'return'では' C'で 'Python Shell'の結果を確認する必要があります。 – furas
コンソールで直接実行しようとします。' python script.py'を実行してください。 – furas
上記の提案はどちらも機能しません。 '' Hello world! 'を見たい場合は '' None''が返されます。これはリンク[1]にあるようにコードで行われました。 –