@kiosok

Как запустить .bat файл через pywinauto?

При попытки запустить программу с расширение .bat происходит ошибка:

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


Код скрипта:
from pywinauto.application import Application

app = Application(backend="uia").start(r'G:\Documents\Python\auto_old_dump\dump\start.bat')

(Использую библиотеку pywinauto т.к. в последствии надо будет взаимодействовать с этой программой)
скриншот той программы что он должен запустить:
6331aa1926a71654357692.png
  • Вопрос задан
  • 161 просмотр
Пригласить эксперта
Ответы на вопрос 3
Vindicar
@Vindicar
RTFM!
С командной строкой взаимодействуй через стандартный модуль subprocess. pywinauto ТОЛЬКО для графических приложений.
Ответ написан
Комментировать
@res2001
Developer, ex-admin
Скорее всего напрямую батник вы запустить не сможете - это не исполняемый файл. Винда не умеет так как никсы.
Вам нужно запускать батник как параметр cmd.exe.
Например:
cmd.exe /c G:\Documents\Python\auto_old_dump\dump\start.bat
Ответ написан
Комментировать
vasily-v-ryabov
@vasily-v-ryabov
Python, UI Automation, pywinauto
Скорее всего это типичная проблема launcher -> spawned child process. Нужно просто покурить параметры метода .start(...), чтобы он не ждал GUI в launcher процессе (кажется, wait_for_idle=False), а потом использовать метод .connect(...) уже по тайтлу окна, например, с таймаутом (оно же не мгновенно появится). Ну, или да, стартовать лончер модулем subprocess, чтоб ничего не курить.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы