[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