Ответ 1
Процесс 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
.