Author: Armin Rigo <ar...@tunes.org>
Branch: cffi-embedding-win32
Changeset: r82160:fcdb779aa03c
Date: 2016-02-11 15:59 +0100
http://bitbucket.org/pypy/pypy/changeset/fcdb779aa03c/

Log:    follow-up for e1b9c0216be7: move it outside pypy_setup_home(), just
        in case, but keep the logic. Add a comment that describes the
        problem.

diff --git a/pypy/goal/targetpypystandalone.py 
b/pypy/goal/targetpypystandalone.py
--- a/pypy/goal/targetpypystandalone.py
+++ b/pypy/goal/targetpypystandalone.py
@@ -105,10 +105,6 @@
         space.appexec([w_path], """(path):
             import sys
             sys.path[:] = path
-            import os
-            sys.stdin  = sys.__stdin__  = os.fdopen(0, 'rb', 0)
-            sys.stdout = sys.__stdout__ = os.fdopen(1, 'wb', 0)
-            sys.stderr = sys.__stderr__ = os.fdopen(2, 'wb', 0)
         """)
         # import site
         try:
diff --git a/pypy/module/_cffi_backend/embedding.py 
b/pypy/module/_cffi_backend/embedding.py
--- a/pypy/module/_cffi_backend/embedding.py
+++ b/pypy/module/_cffi_backend/embedding.py
@@ -56,6 +56,24 @@
         must_leave = False
         try:
             must_leave = space.threadlocals.try_enter_thread(space)
+
+            # Annoying: CPython would just use the C-level
+            # std{in,out,err} as configured by the main application,
+            # for example in binary mode on Windows or with buffering
+            # turned off.  We can't easily do the same.  Instead, go
+            # for the safest bet (but possibly bad for performance)
+            # and open sys.std{in,out,err} unbuffered.  On Windows I
+            # guess binary mode is a better default choice.
+            #
+            # XXX if needed, we could add support for a flag passed to
+            # this function.
+            space.appexec([], """():
+                import os
+                sys.stdin  = sys.__stdin__  = os.fdopen(0, 'rb', 0)
+                sys.stdout = sys.__stdout__ = os.fdopen(1, 'wb', 0)
+                sys.stderr = sys.__stderr__ = os.fdopen(2, 'wb', 0)
+            """)
+
             load_embedded_cffi_module(space, version, init_struct)
             res = 0
         except OperationError, operr:
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to