[issue10080] Py_Initialize crashes when stdout has been redirected with freopen
New submission from Mitchell Stokes : I have Python embedded in a C/C++ program, and I'm trying to redirect stdout to a text file. Since I'm trying to get rid of the console, I want C and Python stdout going to the text file (so, not sys.stdout = open('log.txt', 'w')). To this end, I used freopen() like so: freopen("log.txt", "w", stdout); to redirect stdout in C. However, when using Python 3.1, I get the following error: Fatal Python error: Py_Initialize: can't initialize sys standard streams OSError: [Errno 9] Bad file descriptor followed by a crash (Runtime Error). I think this is somewhat related to this bug: http://bugs.python.org/issue1415 I've attached a sample program that illustrates the problem. I compiled it with: gcc -o py_main.exe py_main.c -IC:\Python31\include -LC:\Python31\libs -lpython31 I had someone test the sample program on Linux, and it worked fine there, so I think it's a Windows issue. -- components: Windows files: py_main.c messages: 118502 nosy: Mitchell.Stokes priority: normal severity: normal status: open title: Py_Initialize crashes when stdout has been redirected with freopen type: crash versions: Python 3.1 Added file: http://bugs.python.org/file19212/py_main.c ___ Python tracker <http://bugs.python.org/issue10080> ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue10080] Py_Initialize crashes when stdout has been redirected with freopen
Mitchell Stokes added the comment: Setting PYTHONIOENCODING=cp1252 does not help. Also, dup2 is not available on Windows (at least not from what I've read). >From my understanding, freopen() is supposed to be the portable way to redirect stdout. -- ___ Python tracker <http://bugs.python.org/issue10080> ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue10080] Py_Initialize crashes when stdout has been redirected with freopen
Mitchell Stokes added the comment: I used _dup2() and I still got a crash. Also, if I use _fileno(stdout) after using freopen(), I get 1. I'm uploading two more example programs. py_main_fileno_check.c prints the fileno to the text file py_main_dup2.c uses _dup2() to redirect stdout instead of freopen -- Added file: http://bugs.python.org/file19219/py_main_fileno_check.c ___ Python tracker <http://bugs.python.org/issue10080> ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue10080] Py_Initialize crashes when stdout has been redirected with freopen
Changes by Mitchell Stokes : Added file: http://bugs.python.org/file19220/py_main_dup2.c ___ Python tracker <http://bugs.python.org/issue10080> ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com