Commit acd3cca9 authored by Gregory P. Smith's avatar Gregory P. Smith

Issue #20572: The subprocess.Popen.wait method's undocumented endtime

parameter now raises a DeprecationWarning.  It was deprecated in 3.4.
It was never documented prior to that.
parent bc4637ba
...@@ -1031,6 +1031,10 @@ class Popen(object): ...@@ -1031,6 +1031,10 @@ class Popen(object):
"""Wait for child process to terminate. Returns returncode """Wait for child process to terminate. Returns returncode
attribute.""" attribute."""
if endtime is not None: if endtime is not None:
warnings.warn(
"'endtime' argument is deprecated; use 'timeout'.",
DeprecationWarning,
stacklevel=2)
timeout = self._remaining_time(endtime) timeout = self._remaining_time(endtime)
if timeout is None: if timeout is None:
timeout_millis = _winapi.INFINITE timeout_millis = _winapi.INFINITE
...@@ -1392,8 +1396,11 @@ class Popen(object): ...@@ -1392,8 +1396,11 @@ class Popen(object):
if self.returncode is not None: if self.returncode is not None:
return self.returncode return self.returncode
# endtime is preferred to timeout. timeout is only used for if endtime is not None:
# printing. warnings.warn(
"'endtime' argument is deprecated; use 'timeout'.",
DeprecationWarning,
stacklevel=2)
if endtime is not None or timeout is not None: if endtime is not None or timeout is not None:
if endtime is None: if endtime is None:
endtime = _time() + timeout endtime = _time() + timeout
......
...@@ -1015,6 +1015,19 @@ class ProcessTestCase(BaseTestCase): ...@@ -1015,6 +1015,19 @@ class ProcessTestCase(BaseTestCase):
# time to start. # time to start.
self.assertEqual(p.wait(timeout=3), 0) self.assertEqual(p.wait(timeout=3), 0)
def test_wait_endtime(self):
"""Confirm that the deprecated endtime parameter warns."""
p = subprocess.Popen([sys.executable, "-c", "pass"])
try:
with self.assertWarns(DeprecationWarning) as warn_cm:
p.wait(endtime=time.time()+0.01)
except subprocess.TimeoutExpired:
pass # We're not testing endtime timeout behavior.
finally:
p.kill()
self.assertIn('test_subprocess.py', warn_cm.filename)
self.assertIn('endtime', str(warn_cm.warning))
def test_invalid_bufsize(self): def test_invalid_bufsize(self):
# an invalid type of the bufsize argument should raise # an invalid type of the bufsize argument should raise
# TypeError. # TypeError.
...@@ -2777,19 +2790,5 @@ class ContextManagerTests(BaseTestCase): ...@@ -2777,19 +2790,5 @@ class ContextManagerTests(BaseTestCase):
self.assertTrue(proc.stdin.closed) self.assertTrue(proc.stdin.closed)
def test_main():
unit_tests = (ProcessTestCase,
POSIXProcessTestCase,
Win32ProcessTestCase,
MiscTests,
ProcessTestCaseNoPoll,
CommandsWithSpaces,
ContextManagerTests,
RunFuncTestCase,
)
support.run_unittest(*unit_tests)
support.reap_children()
if __name__ == "__main__": if __name__ == "__main__":
unittest.main() unittest.main()
...@@ -40,6 +40,9 @@ Core and Builtins ...@@ -40,6 +40,9 @@ Core and Builtins
Library Library
------- -------
- Issue #20572: The subprocess.Popen.wait method's undocumented
endtime parameter now raises a DeprecationWarning.
- Issue #25659: In ctypes, prevent a crash calling the from_buffer() and - Issue #25659: In ctypes, prevent a crash calling the from_buffer() and
from_buffer_copy() methods on abstract classes like Array. from_buffer_copy() methods on abstract classes like Array.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment