मैं पाइथन में एक स्क्रिप्ट बनाने की कोशिश कर रहा हूं जो समांतर बंदरगाह के माध्यम से डेटा भेजता है। मैं सी भाषा में अपना खुद का मॉड्यूल बना रहा हूं।पायथन सी एक्सटेंशन मॉड्यूल में वापसी मूल्य के बिना विधि
समस्या यह है: जब मैं अपने मॉड्यूल को निष्पादित करने का प्रयास करता हूं, पायथन क्रैश होता है। कोई त्रुटि नहीं, कोई डेटा नहीं, कुछ भी नहीं। यह बस बंद हो जाता है।
#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);
}
(यह सब अजगर गड़बड़ बिना काम करता है) मैं distutils के माध्यम से यह संकलन और उसके बाद, टर्मिनल में (xubuntu का प्रयोग करके), मैं डाल:
import paralelo
while True:
paralelo.paralelo(255)
यह मेरा मॉड्यूल है और यहां, यह अजगर से बाहर चला जाता है, यह "markmb @ ..."
अग्रिम धन्यवाद!
मैंने सी में अपना पाइथन मॉड्यूल नहीं बनाया है, लेकिन आपके फ़ंक्शन पैरालेलो में जहां इसे PyObject * वापस करना है, तो आप अंत में 1 क्यों लौट रहे हैं? – lloydm
यह वास्तव में कुछ भी वापस नहीं करना चाहिए, लेकिन मैंने याद रखने के लिए उस वापसी को छोड़ दिया है यदि मैंने कभी भी एक और मॉड्यूल फिर से किया है – markmb
तो अगर आप इसके बजाय न्यूल वापस करते हैं तो कैसे? 1 की बजाय जो एक अवैध सूचक है। – lloydm