On Mon, 14 Mar 2005, Michael Fuhr wrote:
Would we? My understanding is that code passed to PyRun_String() and friends must be free of line-ending CRs on all platforms, and that the code that reads a "normal" Python script takes care of that (i.e., normalizes line endings to be LF only). Can anybody confirm or deny?
I'm not sure of that. I suspect you'll need to pass CRs on windows.
If anyone manages to compile the following code on Windows...
#include "Python.h"
void run_program(const char *program) { PyObject *ret, *globals, *locals;
printf("> running:\n%s\n", program); globals = PyDict_New(); locals = PyDict_New(); ret = PyRun_String(program, Py_file_input, globals, locals); if (ret) { Py_DECREF(ret); printf("\n"); } else { PyErr_Print(); } Py_DECREF(locals); Py_DECREF(globals); printf("> end\n\n");
}
int main(int argc, char *argv[]) { const char *program1 = "print 1\nprint 2\n"; const char *program2 = "print 1\r\nprint 2\r\n";
Py_Initialize(); printf("> Initialized.\n"); printf("> Python %s\n", Py_GetVersion()); run_program(program1); run_program(program2); Py_Finalize(); printf("> Finalized.\n"); }
On my Fedora Core 2, I need to complile it with the following command:
gcc -I/usr/include/python2.3 -L/usr/lib/python2.3/config py-test.c -o py-test\ -lpython2.3 -ldl -lm -lpthread -lutil
This is my first attempt to embed python, so I may be missing something...
On Linux, you get:
$ ./py-test 2>&1 | cat -v
[GCC 3.3.3 20040412 (Red Hat Linux 3.3.3-7)]Initialized. Python 2.3.3 (#1, May 7 2004, 10:31:40)
running:
print 1 print 2
1 2
end
running:
print 1^M print 2^M
File "<string>", line 1 print 1^M ^ SyntaxError: invalid syntax
end
Finalized.
I bet on windows the first program fails and the second is ok.
.TM. -- ____/ ____/ / / / / Marco Colombo ___/ ___ / / Technical Manager / / / ESI s.r.l. _____/ _____/ _/ [EMAIL PROTECTED]
---------------------------(end of broadcast)--------------------------- TIP 8: explain analyze is your friend