Процесс STARTUPINFO
может скрыть окно консоли:
si = subprocess.STARTUPINFO()
si.dwFlags |= subprocess.STARTF_USESHOWWINDOW
#si.wShowWindow = subprocess.SW_HIDE # default
subprocess.call('taskkill /F /IM exename.exe', startupinfo=si)
Или установить флаги создания, чтобы отключить создание окна:
CREATE_NO_WINDOW = 0x08000000
subprocess.call('taskkill /F /IM exename.exe', creationflags=CREATE_NO_WINDOW)
Выше все еще процесс консолис действительными дескрипторами для консольного ввода-вывода (проверяется путем вызова GetFileType
для дескрипторов, возвращаемых GetStdHandle
).У него просто нет окна и он не наследует родительскую консоль, если она есть.
Вы можете пойти еще дальше, заставив ребенка вообще не иметь консоли:
DETACHED_PROCESS = 0x00000008
subprocess.call('taskkill /F /IM exename.exe', creationflags=DETACHED_PROCESS)
В этом случае стандартные ручки ребенка (т. Е. GetStdHandle
) равны 0, но выможно установить для них открытый файл на диске или канал, такой как subprocess.DEVNULL
(3.3) или subprocess.PIPE
.