embedding interactive python interpreter
MRAB
python at mrabarnett.plus.com
Fri Mar 25 13:47:02 EDT 2011
On 25/03/2011 17:37, Eric Frederich wrote:
> So.... I found that if I type ctrl-d then the other lines will print.
>
> It must be a bug then that the exit() function doesn't do the same thing.
> The documentation says "The return value will be the integer passed to
> the sys.exit() function" but clearly nothing is returned since the
> call to Py_Main exits rather than returning (even when calling
> sys.exit instead of just exit).
>
> In the mean time is there a way to redefine the exit function in
> Python to do the same behavior as "ctrl-d?"
> I realize that in doing that (if its even possible) still won't
> provide a way to pass a value back from the interpreter via sys.exit.
>
You could flush stdout after each print or turn off buffering on stdout
with:
setvbuf(stdout, NULL, _IONBF, 0);
> Thanks,
> ~Eric
>
>
>
> On Fri, Mar 25, 2011 at 12:02 PM, Eric Frederich
> <eric.frederich at gmail.com> wrote:
>> I am able to embed the interactive Python interpreter in my C program
>> except that when the interpreter exits, my entire program exits.
>>
>> #include<stdio.h>
>> #include<Python.h>
>>
>> int main(int argc, char *argv[]){
>> printf("line %d\n", __LINE__);
>> Py_Initialize();
>> printf("line %d\n", __LINE__);
>> Py_Main(argc, argv);
>> printf("line %d\n", __LINE__);
>> Py_Finalize();
>> printf("line %d\n", __LINE__);
>> return 0;
>> }
>>
>> When I run the resulting binary I get the following....
>>
>> $ ./embedded_python
>> line 5
>> line 7
>> Python 2.7.1 (r271:86832, Mar 25 2011, 11:56:07)
>> [GCC 4.1.2 20080704 (Red Hat 4.1.2-48)] on linux2
>> Type "help", "copyright", "credits" or "license" for more information.
>>>>> print 'hi'
>> hi
>>>>> exit()
>>
>>
>> I never see line 9 or 11 printed.
>> I need to embed python in an application that needs to do some cleanup
>> at the end so I need that code to execute.
>> What am I doing wrong?
>>
>> Is there something else I should call besides "exit()" from within the
>> interpreter?
>> Is there something other than Py_Main that I should be calling?
>>
>> Thanks,
>> ~Eric
>>
More information about the Python-list
mailing list