컨텍스트 : tmux의 상태 표시 줄에 iTunes의 일부 정보 (노래 재생, 아티스트, 플레이어 위치 등)를 표시했습니다. 그것은 쉘 (내 경우에는 zsh) $(osascript -l JavaScript script_file)
을 통해 호출하여 수행합니다. 내가 겪었던 문제는 응용 프로그램 개체에 대한 메서드 호출의 기본 동작과 관련이 있습니다. 응용 프로그램이 닫히면 모든 호출이 응용 프로그램을 엽니 다.JXA - 응용 프로그램이 실행되지 않는 경우 예외 발생 (경쟁 조건 포함)
이것은 tmux 상태 표시 줄이 1 초에 한 번 업데이트되므로 실행 중인지 확인한 후 응용 프로그램이 닫히면 호출이 만들어지기 전에 열립니다. 다시 열면 엄청난 고통입니다. 내가 응용 프로그램을 닫고 싶다면.
예제 코드 :
1 itunes = Application('iTunes')
2
3 if (itunes.running()) {
4 return itunesStatusLine()
5 } else {
6 return '---'
7 }
당신은 경우와 수익 사이의 경쟁 조건을 볼 수 있습니다. 닫기 전에 모든 TMUX 세션을 분리
- : 나는 생각했습니다 무엇
. 이 작업은 수동으로 수행해야하지만 스크립트가 가능하므로 문제가 발생하지 않습니다. 그러나 해결책이 아닌 해결 방법입니다.
- iTunes에서 모든 필요한 데이터를 가져 와서 모든 호출을 자체 if-else 블록으로 래핑하고 데이터를 상태 표시 줄 함수에 전달한 다음 실패 할 경우 예외를 throw합니다. 이것은 문제를 해결하지는 못하지만 더 빠르거나 빨리 (희망을 갖고) 실패함으로써 그것을 완화 할 수 있습니다. (내 마음을 유지하는 동안,이 일을 더 확장하고, 모든 호출 주위에 동일한 try-catch 블록을 두는 것이 지저분 해 보인다.)
- tmux 상태 표시 줄을 느리게 실행한다. 다시 말하지만 솔루션이 아닌 해결 방법을 사용하면 코드의 코드 공유가 가능합니다. 상태 표시 줄에 1 초의 업데이트가있는 것은 흔하지 않습니다 (초를 사용하는 시계가 마음에 듭니다).
나는 응용 프로그램을 여는 대신 응용 프로그램을 닫으면 예외가 발생하는 메서드 호출을 사용하는 것이 이상적이라고 생각합니다. JXA에서 그런 일을 할 수있는 방법이 있다면, 저는 당황합니다. 필자는 문서 (Script Editor 라이브러리에있는 내용과 온라인에서 찾을 수있는 스크랩)를 살펴보고 비어 있습니다.