Вопрос-Ответ

How do I hide the console when I use os.system() or subprocess.call()?

Как мне скрыть консоль при использовании os.system() или subprocess.call()?

Я написал несколько инструкций, подобных приведенным ниже:

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

в обоих случаях появится консоль.

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

Переведено автоматически
Ответ 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.call('powershell.exe taskkill /F /IM exename.exe', shell=True)

Ответ 4

Просто создайте оболочку, которая проверяет наличие ОС Windows, поскольку subprocess.CREATE_NO_WINDOW выдает ошибку в ОС, отличной от Windows. Проблема с открытием окна возникает только в ОС Windows.

def subprocess_run(command, **kwargs):
if (os.name == 'nt'):
kwargs.setdefault('creationflags', subprocess.CREATE_NO_WINDOW)
return subprocess.run(command, **kwargs)

https://docs.python.org/3/library/subprocess.html#windows-constants

python windows subprocess