Sto provando a creare uno script in python che invii i dati attraverso una porta parallela. Sto creando il mio modulo in linguaggio C.Metodo senza valore restituito nel modulo di estensione python
Il problema è: quando provo ad eseguire il mio modulo, python si blocca. Nessun errore, nessun dato, niente. Si chiude semplicemente.
Questo è il mio modulo:
#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);
}
(Funziona senza tutti pasticcio python) compilo attraverso distutils e poi, nel terminale (usando Xubuntu), ho messo:
import paralelo
while True:
paralelo.paralelo(255)
E qui, esce da python, mette "markmb @ ..."
Grazie in anticipo!
Non ho creato il mio modulo Python in C, ma nella tua funzione parallela dove dovrebbe restituire PyObject *, perché stai restituendo 1 alla fine? – lloydm
In realtà non dovrebbe restituire nulla, ma ho lasciato quel ritorno per ricordare se dovessi fare di nuovo un altro modulo – markmb
Quindi, se invece restituissi NULL? Piuttosto che 1 che è un puntatore non valido. – lloydm