From c1d6536d60c39475895fb8691f81510393b9737b Mon Sep 17 00:00:00 2001
From: Peter Astrand <astrand@lysator.liu.se>
Date: Sun, 7 Nov 2004 14:30:34 +0000
Subject: When using shell=True on Windows, don't display a shell window by
 default. Fixes #1057061.

---
 Lib/subprocess.py | 25 ++++++++++++++-----------
 PC/_subprocess.c  |  3 +++
 2 files changed, 17 insertions(+), 11 deletions(-)

diff --git a/Lib/subprocess.py b/Lib/subprocess.py
index 76ea25f..db19d1f 100644
--- a/Lib/subprocess.py
+++ b/Lib/subprocess.py
@@ -372,11 +372,11 @@ if mswindows:
                              STD_OUTPUT_HANDLE, STD_ERROR_HANDLE
         from win32api import GetCurrentProcess, DuplicateHandle, \
                              GetModuleFileName, GetVersion
-        from win32con import DUPLICATE_SAME_ACCESS
+        from win32con import DUPLICATE_SAME_ACCESS, SW_HIDE
         from win32pipe import CreatePipe
         from win32process import CreateProcess, STARTUPINFO, \
                                  GetExitCodeProcess, STARTF_USESTDHANDLES, \
-                                 CREATE_NEW_CONSOLE
+                                 STARTF_USESHOWWINDOW, CREATE_NEW_CONSOLE
         from win32event import WaitForSingleObject, INFINITE, WAIT_OBJECT_0
     else:
         from _subprocess import *
@@ -673,7 +673,19 @@ class Popen(object):
             if not isinstance(args, types.StringTypes):
                 args = list2cmdline(args)
 
+            # Process startup details
+            default_startupinfo = STARTUPINFO()
+            if startupinfo == None:
+                startupinfo = default_startupinfo
+            if not None in (p2cread, c2pwrite, errwrite):
+                startupinfo.dwFlags |= STARTF_USESTDHANDLES
+                startupinfo.hStdInput = p2cread
+                startupinfo.hStdOutput = c2pwrite
+                startupinfo.hStdError = errwrite
+
             if shell:
+                default_startupinfo.dwFlags |= STARTF_USESHOWWINDOW
+                default_startupinfo.wShowWindow = SW_HIDE
                 comspec = os.environ.get("COMSPEC", "cmd.exe")
                 args = comspec + " /c " + args
                 if (GetVersion() >= 0x80000000L or
@@ -692,15 +704,6 @@ class Popen(object):
                     # kill children.
                     creationflags |= CREATE_NEW_CONSOLE
 
-            # Process startup details
-            if startupinfo == None:
-                startupinfo = STARTUPINFO()
-            if not None in (p2cread, c2pwrite, errwrite):
-                startupinfo.dwFlags |= STARTF_USESTDHANDLES
-                startupinfo.hStdInput = p2cread
-                startupinfo.hStdOutput = c2pwrite
-                startupinfo.hStdError = errwrite
-
             # Start the process
             try:
                 hp, ht, pid, tid = CreateProcess(executable, args,
diff --git a/PC/_subprocess.c b/PC/_subprocess.c
index 34073c6..61544c3 100644
--- a/PC/_subprocess.c
+++ b/PC/_subprocess.c
@@ -377,6 +377,7 @@ sp_CreateProcess(PyObject* self, PyObject* args)
 
 	/* note: we only support a small subset of all SI attributes */
 	si.dwFlags = getint(startup_info, "dwFlags");
+	si.wShowWindow = getint(startup_info, "wShowWindow");
 	si.hStdInput = gethandle(startup_info, "hStdInput");
 	si.hStdOutput = gethandle(startup_info, "hStdOutput");
 	si.hStdError = gethandle(startup_info, "hStdError");
@@ -530,6 +531,8 @@ init_subprocess()
 	defint(d, "STD_ERROR_HANDLE", STD_ERROR_HANDLE);
 	defint(d, "DUPLICATE_SAME_ACCESS", DUPLICATE_SAME_ACCESS);
 	defint(d, "STARTF_USESTDHANDLES", STARTF_USESTDHANDLES);
+	defint(d, "STARTF_USESHOWWINDOW", STARTF_USESHOWWINDOW);
+	defint(d, "SW_HIDE", SW_HIDE);
 	defint(d, "INFINITE", INFINITE);
 	defint(d, "WAIT_OBJECT_0", WAIT_OBJECT_0);
 	defint(d, "CREATE_NEW_CONSOLE", CREATE_NEW_CONSOLE);
-- 
cgit v0.12

