2009-10-13 8 views
1

a Mac application에서 기본적으로 데이터를 가져 오는 프로젝트에서 AppleScript에 대한 Python 인터페이스 인 Appscript을 사용하고 있습니다. 여기 Appscript에서 여러 속성 가져 오기

은 샘플 코드입니다 :

asobj = app('Things').to_dos()[0] 
    self.id = asobj.id() 
    self.name = asobj.name() 
    self.status = asobj.status() 

등록 정보 (ID, 이름, 상태)의 모든 호출은 프로세스 간 호출을 수행하고 따라서 그것은 당신이 수천 같은 행동을 할 때 특히 .. 느린 개체.

AppleScript의 Python 인터페이스 (appscript)를 통해 동시에 여러 속성을 가져 오는 방법이 있습니까?

답변

3

저는 이것이 파이썬에서 어떻게 표현 될지 확신하지는 않지만 대부분의 Applescript 객체는 해당 객체의 지원되는 각 속성에 대한 키/값 쌍을 포함하는 사전을 반환하는 "properties"속성을 지원합니다. asobj.properties()을 호출하면 적절한 데이터 구조가 반환되어 원하는 개별 속성을 검색 할 수 있다고 생각합니다.

ref = app('Things').to_dos 
ids = ref.id() 
names = ref.name() 
statuses = ref.status() 

을 한 후 필요에 따라 재 배열 파이썬의 우편() 함수를 사용하면 많은 수의 요소가있는 경우

+1

예, 스크립트 가능한 많은 응용 프로그램이이를 수행하고 Appscript를 사용하여 >>> app ("TextEdit.app"). properties() {k.class_ : k.application, k.version : u'1.6 ', k.frontmost : 거짓, k.name : u'TextEdit'} –

+0

고마워! 'dir (asobj) '을하는 것은 전에 도움이되지 못했습니다. –

+1

Appscript 참조 개체의 dir()은 응용 프로그램의 Applescript 개체에 대해 알려주지 않습니다. Appscript가 Apple Event를 응용 프로그램 객체로 보내고 반환 된 정보를 기반으로 Python 객체를 생성하게하는 메서드 (예 : .get() 또는 암시 적으로())를 호출 할 때까지는 아무 일도 일어나지 않습니다. –

0

,이처럼 속성을 잡기 위해 빠르게 될 것입니다. appscript 문서에는이를 더 자세히 설명하는 최적화 기술에 대한 장이 있습니다.

아직 작성하지 않은 경우 appscript 웹 사이트에서 ASDictionary 및 ASTranslate 도구의 사본을 가져와야합니다. ASTranslate는 AppleScript에서 appscript 구문으로 응용 프로그램 명령을 변환하는 데 도움이됩니다. ASDictionary는 응용 프로그램 사전을 appscript 스타일 형식으로 내 보냅니다. appscript의 내장 된 help() 메소드를 사용하여 응용 프로그램 사전을 대화식으로 탐색 할 수 있습니다 (dir()보다 훨씬 강력합니다).

+0

개별적으로 속성을 얻는 것이 매우 느립니다. –

+0

실제로 위의 내용은 한 번에 하나씩 각 요소의 '속성'속성을 요구하는 것보다 훨씬 빠릅니다. 하나의 Apple 이벤트를 총 3 개의 이벤트 만 전송하기 때문에 하나는 모든 id 속성을 가져오고 하나는 모든 이름 속성을 가져옵니다 하나는 모든 상태 속성을 가져옵니다. 또는 하나의 Apple 이벤트 만 사용하는 app ('Things') to_dos.properties()를 요청할 수도 있습니다. 3 가지 이벤트를 보내는 것보다 원하지 않는 속성을 가져 오는 것보다 빠르거나 빠를 수도 있습니다. 상황과 appscript가 원하지 않는 속성을 모두 압축하여 압축하는 데 걸린 시간에 따라 다릅니다. – has