#!/usr/bin/python import cpfcgi,os def req(): print (repr(os.environ)) cpfcgi.listen(req)
вот собственно сам модуль cpfcgi:
#include <Python.h> #include <fcgi_stdio.h> static PyObject * fcgi_listen(PyObject *self, PyObject *args) { int num=0; PyObject * fun=NULL; if(!PyArg_ParseTuple(args, "O", &fun)) return(NULL); Py_INCREF(fun); while(FCGI_Accept () >= 0) { printf("Content-type: text/html\r\n\r\nyo<br>%d",num); PyEval_CallObject(fun,NULL); // <- trouble is here num++; } Py_DECREF(fun); return Py_BuildValue("i", 0); } static PyMethodDef cpfcgiMethods[] = { {"listen", fcgi_listen, METH_VARARGS, "listen for fastcgi requests."}, {NULL, NULL, 0, NULL} }; PyMODINIT_FUNC initcpfcgi(void) { (void) Py_InitModule("cpfcgi", cpfcgiMethods); }
здесь в каменте указано где проблема.
проблема собссно вот в чем: функция которую я передаю (req) не вызывается. тоесть строчка которая printf ("Content-type … срабатывает, а следующая нет, и дальше все срабатывает, num увеличивается, и все как положенно.
тоесть все работает кроме того что нада (собственно кроме вызова функции которую я передаю)
а мистика в том, что если запускать не через lighttpd а вручную - то функция вызывается, и пишет мне os.environ
(если запускать вручную то FCGI_Accept сразу срабатывает, не дожидаясь fastcgi запроса, и отдает все на stdout. на следующем проходе она не блокирует, и просто возвращает false)
код тотже, абсолютно ничего не меняю
может кто сталкивался с такими приколами?