Как скрыть консоль, когда я использую os.system() или subprocess.call()?
Я написал несколько заявлений, как показано ниже:
os.system(cmd) #do something
subprocess.call('taskkill /F /IM exename.exe')
у обоих появится консоль.
Как я могу остановить его от появления консоли?
4 ответа
Процесс 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
,
Добавить shell=True
Аргумент к вызовам подпроцесса.
subprocess.call('taskkill /F /IM exename.exe', shell=True)
Или, если вам не нужно ждать, используйте subprocess.Popen
скорее, чем subprocess.call
,
subprocess.Popen('taskkill /F /IM exename.exe', shell=True)
Просто добавь:subprocess.call('powershell.exe taskkill /F /IM exename.exe', shell=True)
Пытаться subprocess.Popen(["function","option1","option2"],shell=False)
,