summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Doc/library/subprocess.rst5
-rw-r--r--Lib/subprocess.py12
-rw-r--r--Lib/test/test_subprocess.py16
-rw-r--r--Misc/ACKS1
-rw-r--r--Misc/NEWS5
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
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.