
had another look into it and figured out whats going on, in short for warnings python wants there to be a file on disk for the script and in our case there is None, its not getting __file__ from the global namespace so it gets argv[0] which is the blender3d binary in our case.
The only fix I found so far was to set the __file__ variable in the namespace before running the script.
commit log. http://lists.blender.org/pipermail/bf-blender-cvs/2009-May/019681.html
On Sun, Feb 22, 2009 at 6:45 PM, Campbell Barton <ideasman42@gmail.com> wrote:
Still not sure why this happens. Did a test with a small C/Python file that just runs external scripts, with compiling AND running as a string I don't print gibberish.
So for now I added this to our own warning function...
// import sys; print '\t%s:%d' % (sys._getframe(0).f_code.co_filename, sys._getframe(0).f_lineno)
PyObject *getframe, *frame; PyObject *f_lineno, *f_code, *co_filename;
getframe = PySys_GetObject("_getframe"); // borrowed if (getframe) { frame = PyObject_CallObject(getframe, NULL); if (frame) { f_lineno= PyObject_GetAttrString(frame, "f_lineno"); f_code= PyObject_GetAttrString(frame, "f_code"); if (f_lineno && f_code) { co_filename= PyObject_GetAttrString(f_code, "co_filename"); if (co_filename) {
printf("\t%s:%d\n", PyString_AsString(co_filename),(int)PyInt_AsLong(f_lineno));
Py_DECREF(f_lineno); Py_DECREF(f_code); Py_DECREF(co_filename); Py_DECREF(frame); return; } }
Py_XDECREF(f_lineno); Py_XDECREF(f_code); Py_DECREF(frame); }
} PyErr_Clear(); printf("\tERROR - Could not access sys._getframe(0).f_lineno or sys._getframe().f_code.co_filename\n");
--
- Campbell