Задать вопрос
@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
  • Вопрос задан
  • 188 просмотров
Подписаться 1 Средний 1 комментарий
Пригласить эксперта
Ответы на вопрос 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, чтоб ничего не курить.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы