[fpc-pascal] Executing python code from a pascal program

Adrian Maier adrian.maier at gmail.com
Mon Nov 13 12:45:58 CET 2006


Hello,

I am trying to write a program that is embedding the python interpreter
in order to execute python code.  I don't need to transfer values between
pascal and python.

More specifically, I'm trying to convert to pascal the following:

#include <Python.h>
int main(int argc, char *argv[])
{
  Py_Initialize();
  PyRun_SimpleString("from time import time,ctime\n"
                     "print 'Today is',ctime(time())\n");
  Py_Finalize();
  return 0;
}

I have a minimal unit which includes the needed functions  (h2pas wasn't
able to convert the Python.h  , and i only need those 3 functions anyway ) :

unit Python;
interface
  uses Strings;
  {$LinkLib python2.4}
{$IFDEF FPC}
{$PACKRECORDS C}
{$ENDIF}

  procedure Py_Initialize;external name 'Py_Initialize';
  procedure Py_Finalize;external name 'Py_Finalize';
  function PyRun_SimpleString(_para1:Pchar):longint; external name
'PyRun_SimpleString';
implementation
end.

The pascal program is :

var cmd: PChar;
begin
   cmd:=StrAlloc(256);

   Py_Initialize();
   StrPCopy(cmd, 'print "Hello"');
   PyRun_SimpleString(cmd);   { <--- the program crashes here :
runtime error 216 }
   Py_Finalize();
end.

The problem is that the program crashes at execution with "Runtime
error 216 at <a_memory_address> ".   The backtrace is :

(gdb) backtrace
#0  0xb7e6c3fa in PyOS_Readline () from /usr/lib/libpython2.4.so.1.0
#1  0xb7e6ca7b in PyTokenizer_FromFile () from /usr/lib/libpython2.4.so.1.0
#2  0xb7e6cf5d in PyTokenizer_FromString () from /usr/lib/libpython2.4.so.1.0
#3  0xb7e69fb3 in PyParser_ParseStringFlagsFilename ()
   from /usr/lib/libpython2.4.so.1.0
#4  0xb7e6a091 in PyParser_ParseStringFlags ()
   from /usr/lib/libpython2.4.so.1.0
#5  0xb7eeb408 in PyParser_SimpleParseStringFlags ()
   from /usr/lib/libpython2.4.so.1.0
#6  0xb7eeb8a1 in PyRun_StringFlags () from /usr/lib/libpython2.4.so.1.0
#7  0xb7eecba3 in PyRun_SimpleStringFlags () from /usr/lib/libpython2.4.so.1.0
#8  0xb7eecc21 in PyRun_SimpleString () from /usr/lib/libpython2.4.so.1.0
#9  0x08048324 in main () at runpy.pas:16

What am i doing wrong ?  Any idea ?


Thank you,
Adrian Maier



More information about the fpc-pascal mailing list