Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Re: Embedded and extending python 2.5: trouble with __main__ inPyRun_SimpleFileExFlags?

Reply
Thread Tools

Re: Embedded and extending python 2.5: trouble with __main__ inPyRun_SimpleFileExFlags?

 
 
Carl Douglas
Guest
Posts: n/a
 
      03-05-2007
I am going to answer this question myself, but perhaps this will be
useful for someone else. My original C++ code was fine, the
PyRun_SimpleFile was failing due to errors in my python code. To get
a console and display the python interpreter errors I allocated a
console, and redirected stdout and stderr:

BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
AllocConsole();
fpStdOut = freopen( "CONOUT$", "wt", stdout);
fpStdErr = freopen( "CONOUT$", "wt", stderr);
fprintf(stdout, "Console opened\n");
Py_Initialize();
init_mymodule(); // SWIG generated method
break;
case DLL_PROCESS_DETACH:
fclose(fpStdErr);
fclose(fpStdOut);
FreeConsole();
Py_Finalize();
break;
//case DLL_THREAD_ATTACH:
//case DLL_THREAD_DETACH:
}
return TRUE;
}

Then, I can show the Python interpreter errors in the console using
PyErr_Print() in my C++ code:

// Display the Open dialog box.
if (GetOpenFileName(&ofn)==TRUE)
{
// Thank you: http://www.ragestorm.net/tutorial?id=21#8
PyObject* PyFileObject = PyFile_FromString(ofn.lpstrFile, "r");
if (PyFileObject == NULL)
{
PyErr_Print();
PyErr_Clear();
return false; // Let the user know the error.
}

if (PyRun_SimpleFile(PyFile_AsFile(PyFileObject), ofn.lpstrFile) == -1)
{
PyErr_Print();
PyErr_Clear();
}

Py_DECREF(PyFileObject);
}



On 2/19/07, Carl Douglas <(E-Mail Removed)> wrote:
> Hi Python fans,
>
> I am developing a DLL that is loaded by a host application on windows.
> I'm using python 2.5.
>
> My DLL uses an embedded python interpreter which can access the host
> application through an API which I have exposed using SWIG 1.3.31.
>
> Therefore I have both extended and embedded Python at once: the SWIG
> generated code is statically linked into my DLL, and one of the
> functions in my DLL executes PyRun_SimpleFile.
>
> Using python25_d.dll, I stepped through some python code to understand
> what is happening, and it appears that PyRun_SimpleFile is returning
> -1 because python cannot create the module __main__.
>
> Here's the code from pythonrun.c:
>
> int
> PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
> PyCompilerFlags *flags)
> {
> PyObject *m, *d, *v;
> const char *ext;
>
> m = PyImport_AddModule("__main__");
> if (m == NULL)
> return -1;
> .
> .
> .
> }
>
> BTW, PyImport_AddModule fails because deeper down a dictionary check fails:
>
> if (!PyDict_Check(op))
> return NULL;
>
>
> Can someone suggest what I need to do to get this to work?
>
> Here are the relevant lines from my code:
>
> if (GetOpenFileName(&ofn)==TRUE)
> {
> Py_Initialize();
> init_mymodule(); // SWIG generated method
>
> PyObject* PyFileObject = PyFile_FromString(ofn.lpstrFile, "r");
>
> if (PyRun_SimpleFile(PyFile_AsFile(PyFileObject), ofn.lpstrFile)==-1)
> {
> MessageBox(NULL, "error running script", "Python", MB_ICONERROR);
> }
>
> Py_DECREF(PyFileObject);
>
> Py_Finalize();
> }
>
> Thanks.
>

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Embedded and extending python 2.5: trouble with __main__ inPyRun_SimpleFileExFlags? Carl Douglas Python 0 02-19-2007 10:51 AM
Extending Embedded Python and execute external script Vertilka Python 1 01-04-2007 01:02 PM
Extending embedded Python: Adding single methods Torsten Bronger Python 3 03-09-2006 07:24 AM
Extending Embedded Python Richard Townsend Python 1 09-25-2005 09:01 AM
import __main__ where can i find a module called "__main__.py"? wen Python 2 08-21-2005 02:09 PM



Advertisments