summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGregory P. Smith <greg@krypto.org>2012-09-29 19:41:03 (GMT)
committerGregory P. Smith <greg@krypto.org>2012-09-29 19:41:03 (GMT)
commit0f21adf7999d0a50889cde65419e51cfe77e9e1d (patch)
tree0d689e15c8fc5887b47f76bd13881a9cc23eb92c
parentb32d5912d2a6504740146e4d4b1a477189e932d2 (diff)
downloadcpython-0f21adf7999d0a50889cde65419e51cfe77e9e1d.zip
cpython-0f21adf7999d0a50889cde65419e51cfe77e9e1d.tar.gz
cpython-0f21adf7999d0a50889cde65419e51cfe77e9e1d.tar.bz2
pty.spawn() now returns the child process status as returned by os.waitpid().
Addresses the remaining feature request from issue #2489.
-rw-r--r--Doc/library/pty.rst3
-rw-r--r--Lib/pty.py1
-rw-r--r--Lib/test/test_pty.py6
-rw-r--r--Misc/NEWS2
4 files changed, 12 insertions, 0 deletions
diff --git a/Doc/library/pty.rst b/Doc/library/pty.rst
index 2b9385b..90baec5 100644
--- a/Doc/library/pty.rst
+++ b/Doc/library/pty.rst
@@ -45,6 +45,9 @@ The :mod:`pty` module defines the following functions:
a file descriptor. The defaults try to read 1024 bytes each time they are
called.
+ .. versionchanged:: 3.4
+ :func:`spawn` now returns the status value from :func:`os.waitpid`
+ on the child process.
Example
-------
diff --git a/Lib/pty.py b/Lib/pty.py
index 3ccf619..3b79202 100644
--- a/Lib/pty.py
+++ b/Lib/pty.py
@@ -178,3 +178,4 @@ def spawn(argv, master_read=_read, stdin_read=_read):
tty.tcsetattr(STDIN_FILENO, tty.TCSAFLUSH, mode)
os.close(master_fd)
+ return os.waitpid(pid, 0)[1]
diff --git a/Lib/test/test_pty.py b/Lib/test/test_pty.py
index ef95268..db37039 100644
--- a/Lib/test/test_pty.py
+++ b/Lib/test/test_pty.py
@@ -196,6 +196,12 @@ class PtyTest(unittest.TestCase):
# pty.fork() passed.
+ def test_spawn_returns_status(self):
+ status = pty.spawn([sys.executable, '-c', 'import sys; sys.exit(0)'])
+ self.assertEqual(status, 0)
+ status = pty.spawn([sys.executable, '-c', 'import sys; sys.exit(5)'])
+ self.assertEqual(status, 5 << 8)
+
class SmallPtyTests(unittest.TestCase):
"""These tests don't spawn children or hang."""
diff --git a/Misc/NEWS b/Misc/NEWS
index 0012f1e..04751b7 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -15,6 +15,8 @@ Core and Builtins
Library
-------
+- pty.spawn() now returns the child process status returned by os.waitpid().
+
- Issue #15756: subprocess.poll() now properly handles errno.ECHILD to
return a returncode of 0 when the child has already exited or cannot
be waited on.