bpo-35345: Remove platform.popen() (GH-10781)

Remove platform.popen() function, it was deprecated since Python 3.3:
use os.popen() instead.

Rename also the "Removed" section to "API and Feature Removals"
of What's New in Python 3.8.
This commit is contained in:
Victor Stinner 2018-11-29 09:58:20 +01:00 committed by GitHub
parent 7cc1fa40b7
commit 73104fa1e6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 12 additions and 58 deletions

View File

@ -212,20 +212,6 @@ Windows Platform
only runs on Win32 compatible platforms.
Win95/98 specific
^^^^^^^^^^^^^^^^^
.. function:: popen(cmd, mode='r', bufsize=-1)
Portable :func:`popen` interface. Find a working popen implementation
preferring :func:`win32pipe.popen`. On Windows NT, :func:`win32pipe.popen`
should work; on Windows 9x it hangs due to bugs in the MS C library.
.. deprecated:: 3.3
This function is obsolete. Use the :mod:`subprocess` module. Check
especially the :ref:`subprocess-replacements` section.
Mac OS Platform
---------------

View File

@ -373,8 +373,13 @@ Deprecated
(Contributed by Serhiy Storchaka in :issue:`33710`.)
Removed
=======
API and Feature Removals
========================
The following features and APIs have been removed from Python 3.8:
* The function :func:`platform.popen` has been removed, it was deprecated since
Python 3.3: use :func:`os.popen` instead.
* The ``pyvenv`` script has been removed in favor of ``python3.8 -m venv``
to help eliminate confusion as to what Python interpreter the ``pyvenv``
@ -414,6 +419,9 @@ Changes in Python behavior
Changes in the Python API
-------------------------
* The function :func:`platform.popen` has been removed, it was deprecated since
Python 3.3: use :func:`os.popen` instead.
* The :meth:`~tkinter.ttk.Treeview.selection` method of the
:class:`tkinter.ttk.Treeview` class no longer takes arguments. Using it with
arguments for changing the selection was deprecated in Python 3.6. Use

View File

@ -227,15 +227,6 @@ def libc_ver(executable=sys.executable, lib='', version='', chunksize=16384):
pos = m.end()
return lib, version
def popen(cmd, mode='r', bufsize=-1):
""" Portable popen() interface.
"""
import warnings
warnings.warn('use os.popen instead', DeprecationWarning, stacklevel=2)
return os.popen(cmd, mode, bufsize)
def _norm_version(version, build=''):
""" Normalize the version and build strings and return a single

View File

@ -3,9 +3,7 @@ import platform
import subprocess
import sys
import sysconfig
import tempfile
import unittest
import warnings
from test import support
@ -316,37 +314,6 @@ class PlatformTest(unittest.TestCase):
self.assertLess(V('1.13++'), V('5.5.kw'))
self.assertLess(V('0.960923'), V('2.2beta29'))
def test_popen(self):
mswindows = (sys.platform == "win32")
if mswindows:
command = '"{}" -c "print(\'Hello\')"'.format(sys.executable)
else:
command = "'{}' -c 'print(\"Hello\")'".format(sys.executable)
with warnings.catch_warnings():
warnings.simplefilter("ignore", DeprecationWarning)
with platform.popen(command) as stdout:
hello = stdout.read().strip()
stdout.close()
self.assertEqual(hello, "Hello")
data = 'plop'
if mswindows:
command = '"{}" -c "import sys; data=sys.stdin.read(); exit(len(data))"'
else:
command = "'{}' -c 'import sys; data=sys.stdin.read(); exit(len(data))'"
command = command.format(sys.executable)
with warnings.catch_warnings():
warnings.simplefilter("ignore", DeprecationWarning)
with platform.popen(command, 'w') as stdin:
stdout = stdin.write(data)
ret = stdin.close()
self.assertIsNotNone(ret)
if os.name == 'nt':
returncode = ret
else:
returncode = ret >> 8
self.assertEqual(returncode, len(data))
if __name__ == '__main__':
unittest.main()

View File

@ -0,0 +1,2 @@
The function `platform.popen` has been removed, it was deprecated since Python
3.3: use :func:`os.popen` instead.