왜이 Applescript가 처음에 실패하지만 항상 그 후에 작동합니까?


1

다음 Applescript는 QuickHue라는 메뉴 표시 줄 앱을 열고 메뉴에서 지정된 항목을 클릭합니다. 종종 애플 스크립트를 사용할 때 아무것도하지 않습니다. 그러나 잠시 기다렸다가 다시 시도하면 완벽하게 작동합니다. 그리고 계속 작동합니다. 그러나 시간이 지나서 다시 트리거하면 처음에 다시 실패합니다. 그 후에는 챔피언처럼 작동합니다. 여기 애플 스크립트가 있습니다. 여기서 무슨 일이 일어나고 있는지 아십니까?

ignoring application responses
    tell application "System Events" to tell process "QuickHue"
        click menu bar item 1 of menu bar 1
    end tell
end ignoring
do shell script "killall System\\ Events"
delay 0.1
tell application "System Events" to tell process "QuickHue"
    tell menu bar item 1 of menu bar 1
        click menu item 2 of menu 1
    end tell
end tell

무시는 응용 프로그램 응답을 기다리고 있습니다! 첫 번째 줄은 응용 프로그램 "시스템 이벤트"에 무시 명령을 사용하는 것보다 알려줍니다.
Ruskes


여기 apple.stackexchange.com/questions/92384 / ... 위 의 애플 스크립트가 있습니다. 다음은 해당 질문에 대한 답변입니다. "일부 메뉴 항목을 클릭 한 후 약 5 초 동안 스크립트가 차단되는 버그가 있습니다. 응용 프로그램 무시 응답하면 스크립트가 즉시 종료됩니다. "
2oh1

이 스크립트를 작성하는 방법에 관계없이 처음 사용할 때 실패합니다. 아무 반응이 없습니다. 그러나 두 번째는 매력처럼 작동합니다.
2oh1

자세한 내용은 콘솔에서 동시에 타임 스탬프를 확인하십시오.
Ruskes

답변:


0

스크립트가 성공했는지 여부를 추적하고 스크립트가 완료 될 때까지 (또는 일부 차단 시간이 지날 때까지) 계속 시도하는 루프를 작성할 수 있습니다. 실제로 문제가 시스템 이벤트가 완전히 시작되지 않은 경우 응용 프로그램 시스템 이벤트가 실행 중인지 루프가 시스템 이벤트를 요청할 수 있습니다. 사용할 수있는 간단한 기능은 다음과 같습니다.

on appIsRunning(appName)
    tell application "System Events" to (name of processes) contains appName
end appIsRunning

완전히 시작되었는지 확인하기 위해 루프 후 지연을 구현할 수 있습니다.

루프 함수는 다음과 같습니다.

on startApp(appName)
    set IsRunning to false
    set tries to 20
    repeat until (IsRunning is true or tries is 0)
        set IsRunning to appIsRunning(appName)
        set tries to (tries - 1)
        delay 0.1
    end repeat
end startApp

또는 스크립트의 성공적인 실행을 결정하는 다른 방법이있을 수 있습니다. 성공을 확인할 수있는 상태가 있습니까? 그렇다면 시스템 이벤트 시작 여부 대신 해당 조건이 충족 될 때까지 루프 할 수 있습니다.

또 다른 것은, 시스템 이벤트가 작동하기 위해 애플 스크립트가 시작되기 전에 시스템 이벤트가 애플 스크립트에 "등록"해야하는지 모르겠습니다. 그렇다면 다음을 시도하십시오. 시스템 이벤트를 시작한 다음 다음과 같이 스크립트를 실행하는 별도의 도우미 스크립트를 만들 수 있습니다.

startApp("System Events")
set myApp to "/Users/whatever/myScriptAsApp.app"
do shell script "open " & quoted form of POSIX path of myApp & " 2>&1 &"

어떻게되는지 알려주세요. 나는 종종 내 스크립트 몇 가지와 같은 문제가 있습니다. 나는 아직 이것을 시도하지 않았습니다.

행운을 빈다, Rob


감사! 그것은 훌륭한 아이디어이며, 나중에 사용할 수 있도록 명심하겠습니다. 이 프로젝트를 위해 나는 완전히 다른 접근법을 포기하기로 결정했습니다. 메뉴 막대 앱을 포기하고 애플 스크립트를 사용하여 여는 대신 애플 스크립트를 작성하여 작업을 수행했습니다.
2oh1

1

네 말이 맞아, 나는 그것을 충분히 테스트하지 않았다. 시스템 이벤트가 아직 실행되고 있지 않은 경우 오류가 표시되었습니다. 또 다른 해결 방법으로, 나는 추가 launch application "System Events"delay 0.2시작에 :

launch application "System Events"
delay 0.2
ignoring application responses
    tell application "System Events" to tell process "QuickHue"
        click menu bar item 1 of menu bar 1
    end tell
end ignoring
do shell script "killall System\\ Events"
delay 0.1
tell application "System Events" to tell process "QuickHue"
    tell menu bar item 1 of menu bar 1
        click menu item 2 of menu 1
    end tell
end tell

여전히 작동하지 않으면 지연을 늘리십시오.


좋아, 주인은 여기에있다 :)
Ruskes

테스트 해 볼게요! 그것이 작동하면, 나는 스릴 것입니다! Apple Better의 버튼을 통해 Applescript를 시작하기 위해 놀라운 BetterTouchTool을 사용하고 있습니다. QuickHue는 조명을 켜는 앱으로, 색상 음영 및 디머 설정을 포함하여 가정의 조명이 원격으로 트리거됩니다. 정말 멋지지만이 스크립트는 항상 작동하지 않는 유일한 부분이었습니다. 궁금한 점이 있으시면 필립스 색조 전구 시스템이 천재입니다! ...너도 마찬가지야. 진심으로, 도움을 주셔서 대단히 감사합니다! 지금 테스트 중입니다. 여태까지는 그런대로 잘됐다!
2oh1

당황했습니다. 지연 변경, ignore 명령이 떨어지는 곳으로 이동 및 애플 리케이션을 응용 프로그램으로 저장하는 것을 포함 하여이 스크립트를 여러 가지 방법으로 다시 작성하려고 시도했지만, 내가하는 일에 관계없이 메뉴 막대 응용 프로그램을 여는 줄 앞에 SOMETIMES 스크립트가 중지됩니다 . 한 번 작동하면 계속 작동합니다. 그러나 한 번 반 시간 동안 사용되지 않은 경우, 아마도 발사했을 때 실속으로 돌아갑니다.
2oh1

질문 : Mac을 사용 중이거나 iTunes를 듣고 웹을 서핑하는 경우 시스템 이벤트가 아직 실행되고 있지 않은 이유가 있습니까? 나는이 사과가 처음 실패하는 이유를 이해하려고 노력하고 있지만 한동안 사용되지 않을 때까지 매번 매력처럼 작동합니다. 그런 다음 처음으로 다시 실패합니다.
2oh1

@ 20h1 이번에도 충분히 테스트하지 못했습니다. 몇 분 기다린 후에도 같은 일이 일어 났지만 해결 방법을 찾지 못했습니다. 시스템 이벤트는 AppleScript에서만 사용되며 몇 분 동안 사용하지 않으면 자동으로 종료됩니다.
Lri
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.