私は、パラレルポート経由でデータを送信するスクリプトをPythonで作成しようとしています。私は自分のモジュールをC言語で作成しています。python c拡張モジュールの戻り値のないメソッド
私のモジュールを実行しようとすると、pythonがクラッシュします。エラーなし、データなし、何もありません。それは単に閉じる。
これは私のモジュールです:
#include <Python.h>
#include <sys/io.h>
#define BaseAddr 0x378
/*----------------------------------------------------------------------------------
Este es un módulo destinado a controlar el puerto paralelo.
Probablemente tenga que ser ejecutado como administrador.
Created by markmb
------------------------------------------------------------------------------------*/
static PyObject *
paralelo(PyObject *self, PyObject *args){
int pin;
ioperm(BaseAddr,3,1);
if (!PyArg_ParseTuple(args, "i", &pin))
return NULL;
outb(pin,BaseAddr);
ioperm(BaseAddr,3,0);
return 1
}
PyMethodDef methods[] = {
{"paralelo", paralelo, METH_VARARGS, "Sends data through a parallel port"},
{NULL, NULL, 0, NULL}
};
PyMODINIT_FUNC
initparalelo(void){
(void) Py_InitModule("paralelo", methods);
}
(これは、すべてのPythonの混乱せずに動作します) 私は(Xubuntuのを使用して)、端末で、その後のdistutilsを通してそれをコンパイルして、私が入れ:
import paralelo
while True:
paralelo.paralelo(255)
をそして、ここでは、pythonから出て、 "markmb @ ..."を入れます。
ありがとうございます!
CでPythonモジュールを作成していませんが、PyObject *を返すはずの関数paraleloでは、なぜ1を返していますか? – lloydm
本当に何も返すべきではありませんが、別のモジュールをやり直す場合は、覚えておきます。 – markmb
代わりにNULLを返すのはどうですか? 1よりもむしろ無効なポインタです。 – lloydm