2017-01-06 13 views
1

私はチュートリアルに従っています: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モジュールから返されますか?これに

+0

あなたの関数は、システムに直接印刷することができると 'PythonのShell'は自動的vaulesは、関数から返された印刷されます。 'printf()'ではなく 'return'では' C'で 'Python Shell'の結果を確認する必要があります。 – furas

+0

コンソールで直接実行しようとします。' python script.py'を実行してください。 – furas

+0

上記の提案はどちらも機能しません。 '' Hello world! 'を見たい場合は '' None''が返されます。これはリンク[1]にあるようにコードで行われました。 –

答えて

0

更新しますhello.iファイル:

/*hello.i*/ 

%module hello 
%{ 
void say_hello(const char* name); 
%} 

void say_hello(const char* name); 
関連する問題

 関連する問題