diff options
-rw-r--r-- | Doc/library/subprocess.rst | 5 | ||||
-rw-r--r-- | Lib/subprocess.py | 12 | ||||
-rw-r--r-- | Lib/test/test_subprocess.py | 16 | ||||
-rw-r--r-- | Misc/ACKS | 1 | ||||
-rw-r--r-- | Misc/NEWS | 5 |
5 files changed, 32 insertions, 7 deletions
diff --git a/Doc/library/subprocess.rst b/Doc/library/subprocess.rst index ea065b8..e9ba15e 100644 --- a/Doc/library/subprocess.rst +++ b/Doc/library/subprocess.rst @@ -746,7 +746,8 @@ on Windows. Partial support of the Windows `STARTUPINFO <https://msdn.microsoft.com/en-us/library/ms686331(v=vs.85).aspx>`__ - structure is used for :class:`Popen` creation. + structure is used for :class:`Popen` creation. The following attributes can be set + by passing them as keyword-only arguments. .. attribute:: dwFlags @@ -788,6 +789,8 @@ on Windows. :data:`SW_HIDE` is provided for this attribute. It is used when :class:`Popen` is called with ``shell=True``. + .. versionchanged:: 3.7 + *Keyword-only argument* support was added. Constants ^^^^^^^^^ diff --git a/Lib/subprocess.py b/Lib/subprocess.py index 67b9c9f..dffcda3 100644 --- a/Lib/subprocess.py +++ b/Lib/subprocess.py @@ -127,11 +127,13 @@ if _mswindows: import msvcrt import _winapi class STARTUPINFO: - dwFlags = 0 - hStdInput = None - hStdOutput = None - hStdError = None - wShowWindow = 0 + def __init__(self, *, dwFlags=0, hStdInput=None, hStdOutput=None, + hStdError=None, wShowWindow=0): + self.dwFlags = dwFlags + self.hStdInput = hStdInput + self.hStdOutput = hStdOutput + self.hStdError = hStdError + self.wShowWindow = wShowWindow else: import _posixsubprocess import select diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py index 82e0b87..812e7bf 100644 --- a/Lib/test/test_subprocess.py +++ b/Lib/test/test_subprocess.py @@ -2550,6 +2550,22 @@ class Win32ProcessTestCase(BaseTestCase): subprocess.call([sys.executable, "-c", "import sys; sys.exit(0)"], startupinfo=startupinfo) + def test_startupinfo_keywords(self): + # startupinfo argument + # We use hardcoded constants, because we do not want to + # depend on win32all. + STARTF_USERSHOWWINDOW = 1 + SW_MAXIMIZE = 3 + startupinfo = subprocess.STARTUPINFO( + dwFlags=STARTF_USERSHOWWINDOW, + wShowWindow=SW_MAXIMIZE + ) + # Since Python is a console process, it won't be affected + # by wShowWindow, but the argument should be silently + # ignored + subprocess.call([sys.executable, "-c", "import sys; sys.exit(0)"], + startupinfo=startupinfo) + def test_creationflags(self): # creationflags argument CREATE_NEW_CONSOLE = 16 @@ -1726,3 +1726,4 @@ Doug Zongker Peter Åstrand evilzero Dhushyanth Ramasamy +Subhendu Ghosh @@ -13,7 +13,7 @@ Core and Builtins - bpo-28598: Support __rmod__ for subclasses of str being called before str.__mod__. Patch by Martijn Pieters. -- bpo-29607: Fix stack_effect computation for CALL_FUNCTION_EX. +- bpo-29607: Fix stack_effect computation for CALL_FUNCTION_EX. Patch by Matthieu Dartiailh. - bpo-29602: Fix incorrect handling of signed zeros in complex constructor for @@ -1243,6 +1243,9 @@ Core and Builtins Library ------- +- Issue #26128: Added keyword-only arguments support for + subprocess.STARTUPINFO + - Issue #27517: LZMA compressor and decompressor no longer raise exceptions if given empty data twice. Patch by Benjamin Fogle. |