Commit 73104fa1 authored by Victor Stinner's avatar Victor Stinner Committed by GitHub

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.
parent 7cc1fa40
...@@ -212,20 +212,6 @@ Windows Platform ...@@ -212,20 +212,6 @@ Windows Platform
only runs on Win32 compatible platforms. 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 Mac OS Platform
--------------- ---------------
......
...@@ -373,8 +373,13 @@ Deprecated ...@@ -373,8 +373,13 @@ Deprecated
(Contributed by Serhiy Storchaka in :issue:`33710`.) (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`` * The ``pyvenv`` script has been removed in favor of ``python3.8 -m venv``
to help eliminate confusion as to what Python interpreter the ``pyvenv`` to help eliminate confusion as to what Python interpreter the ``pyvenv``
...@@ -414,6 +419,9 @@ Changes in Python behavior ...@@ -414,6 +419,9 @@ Changes in Python behavior
Changes in the Python API 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 * The :meth:`~tkinter.ttk.Treeview.selection` method of the
:class:`tkinter.ttk.Treeview` class no longer takes arguments. Using it with :class:`tkinter.ttk.Treeview` class no longer takes arguments. Using it with
arguments for changing the selection was deprecated in Python 3.6. Use arguments for changing the selection was deprecated in Python 3.6. Use
......
...@@ -227,15 +227,6 @@ def libc_ver(executable=sys.executable, lib='', version='', chunksize=16384): ...@@ -227,15 +227,6 @@ def libc_ver(executable=sys.executable, lib='', version='', chunksize=16384):
pos = m.end() pos = m.end()
return lib, version 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=''): def _norm_version(version, build=''):
""" Normalize the version and build strings and return a single """ Normalize the version and build strings and return a single
......
...@@ -3,9 +3,7 @@ import platform ...@@ -3,9 +3,7 @@ import platform
import subprocess import subprocess
import sys import sys
import sysconfig import sysconfig
import tempfile
import unittest import unittest
import warnings
from test import support from test import support
...@@ -316,37 +314,6 @@ class PlatformTest(unittest.TestCase): ...@@ -316,37 +314,6 @@ class PlatformTest(unittest.TestCase):
self.assertLess(V('1.13++'), V('5.5.kw')) self.assertLess(V('1.13++'), V('5.5.kw'))
self.assertLess(V('0.960923'), V('2.2beta29')) 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__': if __name__ == '__main__':
unittest.main() unittest.main()
The function `platform.popen` has been removed, it was deprecated since Python
3.3: use :func:`os.popen` instead.
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