C API for str methods?
Bjorn Pettersen
BPettersen at NAREX.com
Thu Aug 1 20:43:00 EDT 2002
Is there a reason why methods like str.split, str.join are not
accessible through a C API? (PyUnicode seems to have a lot more of the
functionality available through a C API although not all of them...)
I'm embedding Python and now I need to do something close to the
following in C++, and I thought I'd be able to take a shortcut through
the Python API:
# change last expression, e, to "magicVar = e"
lines = block.split('\n');
lastLine = lines[-1];
stmts = '\n'.join(lines[:-1])
if ';' in lastLine:
lastLineParts = lastLine.split(';');
stmts += ';'.join(lastLineParts[:-1])
stmts += 'magicVar = ' + lastLineParts[-1]
else:
stmts += 'magicVar = ' + lastLine
#PyRun_String(stmts, Py_file_input, ...);
#return PyRun_String("magicVar", Py_eval_input, ...);
In case you are wondering, we want to have a Python codeblock stored in
a database. We currently have two functions to interface to Python
py::stmts() to run top-level statements, unfortunately Python doesn't
return result values for most types when running these through
PyRun_String with Py_file_input, so we also have py::expr() to evaluate
an expression. That combination leads to (very simplified) code like:
py::stmts("a = nrx.NDate(1970,1,1)")
int val = py::expr("a.getYear()");
and what we would like is something like:
int val = py::block(
"a = nrx.NDate(1970,1,1)\n"
"a.getYear()");
If anyone has solved this problem before and has a better solution I'm
all ears <wink>.
-- bjorn
More information about the Python-list
mailing list