Не могу запустить консольное приложение .bat через pywinauto
Мне необходимо запустить программу и ввести в неё данные, пример программы:
При попытки запустить её при помощи pywinauto код ниже:
from pywinauto.application import Application
app = Application(backend="uia").start(r'G:\Documents\Python\auto_old_dump\dump\start.bat')
Python выдает ошибку:
Traceback (most recent call last):
File "G:\Documents\Python\auto_old_dump\auto_old_dump_2.py", line 9, in <module>
app = Application(backend="uia").start(r'G:\Documents\Python\auto_old_dump\dump\start.bat')
File "C:\Users\barsi\AppData\Local\Programs\Python\Python310\lib\site-packages\pywinauto\application.py", line 1075, in start
if wait_for_idle and not app_idle():
File "C:\Users\barsi\AppData\Local\Programs\Python\Python310\lib\site-packages\pywinauto\application.py", line 1061, in app_idle
result = win32event.WaitForInputIdle(
pywintypes.error: (1471, 'WaitForInputIdle', 'Не удалось завершить запрошенную операцию, так как указанный процесс не является процессом графического интерфейса пользователя.')
G:\Documents\Python\auto_old_dump>dotnet Dumper.dll
Что уже только не делал разобраться так и не смог...
Ответы (1 шт):
Через cmd.exe должен и pywinauto запускать:
app = Application(backend="uia").start(
r'cmd.exe /c G:\Documents\Python\auto_old_dump\dump\start.bat',
create_new_console=True,
wait_for_idle=False
)
Опция /k создаёт новую консоль, опция /c выполняет команду и выходит. Вообще, конечно, странно скрипты запускать через pywinauto. Интерактивно что-то вводить в консоль - это не работа для инструмента автоматизации GUI. Можно просто подать на stdin какой-то текст. Например:
start.bat <"Stdin text"
Просто под ввод текста именно в консоль pywinauto вообще не заточена. Технически есть возможность реализовать это (есть фича реквест где-то на гитхабе), но зачем? Если можно проще.
Ну и да, subprocess.check_output("start.bat", shell=True) или что-то типа того вполне уместно.