[Python-checkins] r76724 - in python/branches/release31-maint: Lib/os.py Lib/test/test_popen.py

antoine.pitrou python-checkins at python.org
Wed Dec 9 01:03:16 CET 2009


Author: antoine.pitrou
Date: Wed Dec  9 01:03:16 2009
New Revision: 76724

Log:
Merged revisions 76723 via svnmerge from 
svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r76723 | antoine.pitrou | 2009-12-09 01:01:27 +0100 (mer., 09 déc. 2009) | 3 lines
  
  Issue #7461: objects returned by os.popen() should support the context manager protocol
........


Modified:
   python/branches/release31-maint/   (props changed)
   python/branches/release31-maint/Lib/os.py
   python/branches/release31-maint/Lib/test/test_popen.py

Modified: python/branches/release31-maint/Lib/os.py
==============================================================================
--- python/branches/release31-maint/Lib/os.py	(original)
+++ python/branches/release31-maint/Lib/os.py	Wed Dec  9 01:03:16 2009
@@ -650,6 +650,10 @@
             return returncode
         else:
             return returncode << 8  # Shift left to match old behavior
+    def __enter__(self):
+        return self
+    def __exit__(self, *args):
+        self.close()
     def __getattr__(self, name):
         return getattr(self._stream, name)
     def __iter__(self):

Modified: python/branches/release31-maint/Lib/test/test_popen.py
==============================================================================
--- python/branches/release31-maint/Lib/test/test_popen.py	(original)
+++ python/branches/release31-maint/Lib/test/test_popen.py	Wed Dec  9 01:03:16 2009
@@ -49,6 +49,14 @@
         else:
             self.assertEqual(os.popen("exit 42").close(), 42 << 8)
 
+    def test_contextmanager(self):
+        with os.popen("echo hello") as f:
+            self.assertEqual(f.read(), "hello\n")
+
+    def test_iterating(self):
+        with os.popen("echo hello") as f:
+            self.assertEqual(list(f), ["hello\n"])
+
 def test_main():
     support.run_unittest(PopenTest)
 


More information about the Python-checkins mailing list