open
- это команда, которая запускает приложение как отдельную задачу. Если вы хотите дождаться завершения, вам нужно будет запустить исполняемый файл внутри приложения (.app - это просто суффикс для каталогов).
Но вы не хотите, чтобы сделать это: Само приложение обрабатывает все нагрузки, MacOS является (возможно, у меня на самом деле ни малейшего представления вообще о том, как работают операционные системы) просто скопировав все биты и байты из этот исполняемый файл в ОЗУ; а затем запускает планировщик из операционной системы.
Некоторые приложения открывают окно напрямую, но не все делают. Иногда это вызовы, которые выполняются через некоторые библиотеки, и обычно это занимает некоторое время. Поэтому попытка измерить время, необходимое для открытия окна, также не работает (и приложения могут также инициализировать другие вещи, а измерение времени для таких задач - отличный способ справиться с такими проблемами).
Решение следующее: Вы хотите возобновить, если окно этой программы будет открыто, правильно? Если вы знаете имя процесса, это довольно легко:
import os
import subprocess
devnull = open(os.devnull, 'w')
script = """
tell application "System Events"
set frontApp to first application process whose name is "{}" and frontmost is true
end tell
"""
...
while subprocess.check_call(["osascript", "-e", script.format("name_of_the_process")], stdout=devnull, stderr=devnull) != 0:
pass
osascript
работает AppleScript «приложение», в этом случае приложение, которое пытается получить этот процесс с именем, при условии, что должно иметь окно то есть сверху. Это имя каталога без конечного «.app», я бы предположил. Это не работает, если это приложение не открывается, оставив нам ненужный код выхода (-1719 в этом случае), в то время как у него нет проблем, если приложение открыто. Переменная задана, и сценарий завершается, оставляя нас с кодом 0 в качестве кода выхода.
Если вы хотите только, чтобы процесс появился, удалите and frontmost is true
из кода AppleScript в переменной script
.
Мой код работает, как и ожидалось, на моем Mac, но он печатает на стандартный вывод.
Почему бы вам не использовать ['subprocess'] (https://docs.python.org/3/library/subprocess.html)? – CoryKramer
ive попробовал использовать подпроцесс, dosent сделать разницу –
Это не проблема с Python, это проблема с 'open' возвращением и выходом, когда он дал указание операционной системе открыть приложение. 'open' не ждет. –