[pypy-commit] pypy default: support PYTHONUNBUFFERED (thanks wpq for original patch)
bdkearns
noreply at buildbot.pypy.org
Thu Feb 7 21:16:54 CET 2013
Author: Brian Kearns <bdkearns at gmail.com>
Branch:
Changeset: r60938:79f1404df7ae
Date: 2013-02-07 15:15 -0500
http://bitbucket.org/pypy/pypy/changeset/79f1404df7ae/
Log: support PYTHONUNBUFFERED (thanks wpq for original patch)
diff --git a/pypy/interpreter/app_main.py b/pypy/interpreter/app_main.py
--- a/pypy/interpreter/app_main.py
+++ b/pypy/interpreter/app_main.py
@@ -436,11 +436,14 @@
# (relevant in case of "reload(sys)")
sys.argv[:] = argv
- if PYTHON26 and not options["ignore_environment"]:
- if os.getenv('PYTHONNOUSERSITE'):
- options["no_user_site"] = 1
- if os.getenv('PYTHONDONTWRITEBYTECODE'):
- options["dont_write_bytecode"] = 1
+ if not options["ignore_environment"]:
+ if os.getenv('PYTHONUNBUFFERED'):
+ options["unbuffered"] = 1
+ if PYTHON26:
+ if os.getenv('PYTHONNOUSERSITE'):
+ options["no_user_site"] = 1
+ if os.getenv('PYTHONDONTWRITEBYTECODE'):
+ options["dont_write_bytecode"] = 1
if (options["interactive"] or
(not options["ignore_environment"] and os.getenv('PYTHONINSPECT'))):
diff --git a/pypy/interpreter/test2/test_app_main.py b/pypy/interpreter/test2/test_app_main.py
--- a/pypy/interpreter/test2/test_app_main.py
+++ b/pypy/interpreter/test2/test_app_main.py
@@ -712,6 +712,26 @@
assert data == '\x00(STDOUT)\n\x00' # from stdout
child_out_err.close()
+ def test_non_interactive_stdout_unbuffered(self, monkeypatch):
+ monkeypatch.setenv('PYTHONUNBUFFERED', '1')
+ path = getscript(r"""
+ import sys, time
+ sys.stdout.write('\x00(STDOUT)\n\x00')
+ time.sleep(1)
+ sys.stderr.write('\x00[STDERR]\n\x00')
+ time.sleep(1)
+ # stdout flushed automatically here
+ """)
+ cmdline = '%s -E "%s" %s' % (sys.executable, app_main, path)
+ print 'POPEN:', cmdline
+ child_in, child_out_err = os.popen4(cmdline)
+ data = child_out_err.read(11)
+ assert data == '\x00(STDOUT)\n\x00' # from stderr
+ data = child_out_err.read(11)
+ assert data == '\x00[STDERR]\n\x00' # from stdout
+ child_out_err.close()
+ child_in.close()
+
def test_proper_sys_path(self, tmpdir):
data = self.run('-c "import _ctypes"', python_flags='-S')
if data.startswith('Traceback'):
More information about the pypy-commit
mailing list