【发布时间】:2011-12-09 19:11:18
【问题描述】:
我正在尝试在 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 混乱的情况下工作) 我通过 distutils 编译它,然后在终端(使用 xubuntu)中输入:
import paralelo
while True:
paralelo.paralelo(255)
在这里,它退出了 python,它输入了“markmb@...”
提前致谢!
【问题讨论】:
-
我还没有在 C 中创建自己的 Python 模块,但是在你的函数 paralelo 中它应该返回 PyObject *,为什么你最后返回 1?
-
它真的不应该返回任何东西,但我留下了这个返回值,以纪念我是否再次执行另一个模块
-
那么如果你返回 NULL 怎么样呢?而不是 1 这是一个无效的指针。
-
它看起来更好...但它仍然崩溃。现在,当我在我正在创建的程序中使用该模块时,它会引发错误:SystemError: error return without exception set
-
顺便说一句,已经有一个模块,pypi.python.org/pypi/portio
标签: python c python-c-api parallel-port python-extensions