Скрытие окна консоли после чтения ввода

У меня есть скрипт с графическим интерфейсом, который берет пользовательские данные и сохраняет их в текстовый файл. Он запускает другой скрипт (.exe), который ожидает ввода пользователя, а затем выполняет некоторую работу. Я хочу, чтобы последний скрипт скрывал окно консоли после чтения ввода пользователя, но продолжал работать в фоновом режиме.

Я пытался запустить этот скрипт с subprocess.call('lastscript.exe', shell=True)или subprocess.Popen('lastscript.exe', shell=True). Это не работает. Мне нужно сначала получить данные от пользователя, а затем скрыть консоль и позволить программе работать в фоновом режиме.


person GLHF    schedule 13.05.2016    source источник
comment
Вы рассматривали возможность использования окна tk для ввода?   -  person R21    schedule 13.05.2016
comment
@ R21 Я использую PyQt5 для графического интерфейса.   -  person GLHF    schedule 13.05.2016
comment
Вы контролируете источник для lastscript.exe? Он может легко скрыть собственное окно консоли.   -  person Eryk Sun    schedule 13.05.2016
comment
Да, у меня есть контроль, это просто скрипт, который ожидает ввода от пользователя (в cmd), а затем обрабатывает коды с этим вводом. После ввода я хочу, чтобы он скрылся. Я пробовал все, но не получилось..   -  person GLHF    schedule 13.05.2016
comment
Если lastscript.exe — это скрипт Python, то после чтения ввода вы можете запустить следующее: import ctypes; kernel32 = ctypes.WinDLL('kernel32'); user32 = ctypes.WinDLL('user32'); user32.ShowWindow(kernel32.GetConsoleWindow(), 0).   -  person Eryk Sun    schedule 13.05.2016
comment
@eryksun, не могли бы вы опубликовать этот код в качестве ответа, чтобы я мог попробовать его лучше, и если он работает, я мог бы принять ваш ответ. Также является сторонним модулем ctypes?   -  person GLHF    schedule 13.05.2016
comment
ctypes всегда должны быть доступны в Windows в стандартной библиотеке Python. Это необязательно в системах POSIX, таких как Linux, но почти всегда доступно.   -  person Eryk Sun    schedule 13.05.2016
comment
Кстати, вам не нужен shell=True при запуске lastscript.exe, и, вероятно, не следует его использовать. Используйте оболочку cmd.exe только для запуска команды, для которой требуются встроенные команды оболочки (например, copy или dir) или Windows ShellExecuteEx API. Вы можете запустить EXE-файл напрямую, без оболочки. Я удалил все ссылки на cmd в вашем вопросе, потому что окно консоли - это conhost.exe, а не cmd.exe. Если lastscript.exe является консольным приложением, то оно либо наследует, либо создает новый экземпляр conhost.exe для размещения своего окна консоли.   -  person Eryk Sun    schedule 13.05.2016


Ответы (1)


Вот фрагмент кода, чтобы скрыть консоль Windows в скрипте Python:

import ctypes

kernel32 = ctypes.WinDLL('kernel32')
user32 = ctypes.WinDLL('user32')

SW_HIDE = 0

hWnd = kernel32.GetConsoleWindow()
if hWnd:
    user32.ShowWindow(hWnd, SW_HIDE)
person Eryk Sun    schedule 13.05.2016
comment
Это работает на моем примере сценария, я попробую его на основном сценарии, но я думаю, что это сработает. Спасибо за ответ. - person GLHF; 13.05.2016