Подтвердить что ты не робот

Как скрыть консоль, когда я использую os.system() или subprocess.call()?

Я написал несколько утверждений, как показано ниже:

os.system(cmd) #do something
subprocess.call('taskkill /F /IM exename.exe')

оба появятся в консоли.

Как я могу остановить его при появлении консоли?

4b9b3361

Ответ 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.

Ответ 2

Добавьте аргумент shell=True в вызовы подпроцесса.

subprocess.call('taskkill /F /IM exename.exe', shell=True)

Или, если вам не нужно его ждать, используйте subprocess.Popen, а не subprocess.call.

subprocess.Popen('taskkill /F /IM exename.exe', shell=True)

Ответ 3

Попробуйте subprocess.Popen(["function","option1","option2"],shell=False).