#6358: Merge r73933: Add basic tests for the return value of os.popen().close().

And fix the implementation to make these tests pass with py3k
This commit is contained in:
Amaury Forgeot d'Arc 2009-07-11 09:35:13 +00:00
parent 15ccb3d3f7
commit 97e5f281a7
3 changed files with 17 additions and 1 deletions

View File

@ -643,7 +643,13 @@ class _wrap_close:
self._proc = proc
def close(self):
self._stream.close()
return self._proc.wait() << 8 # Shift left to match old behavior
returncode = self._proc.wait()
if returncode == 0:
return None
if name == 'nt':
return returncode
else:
return returncode << 8 # Shift left to match old behavior
def __getattr__(self, name):
return getattr(self._stream, name)
def __iter__(self):

View File

@ -42,6 +42,13 @@ class PopenTest(unittest.TestCase):
)
support.reap_children()
def test_return_code(self):
self.assertEqual(os.popen("exit 0").close(), None)
if os.name == 'nt':
self.assertEqual(os.popen("exit 42").close(), 42)
else:
self.assertEqual(os.popen("exit 42").close(), 42 << 8)
def test_main():
support.run_unittest(PopenTest)

View File

@ -38,6 +38,9 @@ C-API
Library
-------
- Issue #6358: The exit status of a command started with os.popen() was
reported differently than it did with python 2.x.
- Issue #6323: The pdb debugger did not exit when running a script with a
syntax error.