Я знаю идентификатор процесса приложения в Mac OS X. Как я могу переключиться на него (использующий applescript, или Python, или безотносительно)?
"Переключателем", я имею в виду, вставляю фокус.
Обычное решение состоит в том, чтобы использовать applescript код tell application "Foo" activate
, но здесь имя не полезно, потому что у меня есть много экземпляров того же выполнения приложения. Я однако в состоянии получить идентификатор процесса приложения.
Как я могу переключиться на это приложение программно?
Если вы не хотите / не можете устанавливать дополнительное программное обеспечение, есть встроенный способ поиска идентификаторов процессов и приложений: ps.
ps - полезный инструмент командной строки для поиска информации о запущенных процессах. Чтобы найти конкретное приложение по номеру процесса (который я присвоил переменной myProcessId):
do shell script "ps -p " & myProcessId
, это вернет результат, подобный этому
PID TTY TIME CMD
66766 ?? 9:17.66 /Applications/Firefox.app/Contents/MacOS/firefox-bin -psn_0_3793822
, чтобы ограничить результат только соответствующей строкой, перенаправьте его в grep, например
do shell script "ps -p " & myProcessId & "|grep " & myProcessId
Анализируя ответ, вы можете найти название приложения. Это может быть немного сложно, потому что в результате будет отображаться фактическая команда, используемая для приложения, а не имя приложения (если вы посмотрите на пример, вы увидите, что его можно найти, выполнив поиск something.app в результате) .
Edit - извините, я неправильно понял вопрос.
Вы можете сделать это с помощью системных событий (в любом случае это оказывается намного проще, чем возиться с оболочкой):
tell application "System Events"
set theprocs to every process whose unix id is myProcessId
repeat with proc in theprocs
set the frontmost of proc to true
end repeat
end tell
Вот мое решение с python и applescript:
appscript.app (pid = < yourpid>). activate ()
Вот и все!