From ae160bba2030a7b6c86f6c7aeaf2f9d3fdb627b7 Mon Sep 17 00:00:00 2001 From: Subhendu Ghosh Date: Sat, 25 Feb 2017 20:29:05 +0530 Subject: bpo-26128: Added __init__to subprocess.STARTUPINFO (#171) The Windows-specific subprocess.STARTUPINFO class now accepts keyword-only arguments to its constructor to set the various data attributes. Patch by Subhendu Ghosh. --- Doc/library/subprocess.rst | 5 ++++- Lib/subprocess.py | 12 +++++++----- Lib/test/test_subprocess.py | 16 ++++++++++++++++ Misc/ACKS | 1 + 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 `__ - 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 diff --git a/Misc/ACKS b/Misc/ACKS index 255318e..1995adb 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -1726,3 +1726,4 @@ Doug Zongker Peter Åstrand evilzero Dhushyanth Ramasamy +Subhendu Ghosh diff --git a/Misc/NEWS b/Misc/NEWS index 74ec8c3..4413c51 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -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. -- cgit v0.12