Matthias wrote: > Log("Marker 1"); > Py_XDECREF( PyRun_String( "print 'Hi!'", Py_single_input, Dict, Dict) ); > Log("Marker 2"); > > The output looks like > > Marker 1 > Hi! > Hi! > Marker 2 > > Obviously Hi! is printed twice.
Py_XDECREF is a C macro. If you check its definition you will see that it does indeed evaluate the argument twice. This is a not uncommon problem when using macros in C: if in doubt, do not call a macro with anything as a parameter which has side effects. #define Py_XDECREF(op) if ((op) == NULL) ; else Py_DECREF(op) -- http://mail.python.org/mailman/listinfo/python-list