6 votos

osascript y AppleEvents

He registrado los AppleEvents que se envían desde una ventana de Terminal. El evento que el osascript envía al compilador/interpretador de AppleScript no se registró. ¿Por qué?

En mayor detalle, el siguiente argumento consta de tres hipótesis seguidas de su conclusión lógica. Sin embargo, el experimento demuestra que la conclusión es falsa. Por lo tanto, el argumento es defectuoso. Por desgracia, no sé por qué es defectuoso. ¿Dónde se rompe?

Hipótesis

  1. MacOS viene con un compilador/interpretador de AppleScript incorporado que se instala como un componente OSA.

  2. El comando Terminal osascript no "conoce" AppleScript. Cuando se le pasa una línea de código AppleScript, la transmite al compilador/interpretador de AppleScript a través de la arquitectura OSA enviando un AppleEvent.

  3. La siguiente línea de código, cuando se ejecuta en el Terminal, hará que se impriman en el Terminal todos los AppleEvents enviados por los comandos que se ejecuten posteriormente desde la misma ventana del Terminal:

    export AEDebugSends=1

Conclusión

Después de ejecutar los dos siguientes comandos en una ventana de Terminal:

export AEDebugSends=1
osascript -e 'tell application "Finder" to activate'

dos AppleEvents deben imprimirse:

  1. Uno dirigido desde osascript al compilador/interpretador de AppleScript para que compile y ejecute el comando 'decirle a la aplicación "Finder" que se active'.
  2. Uno dirigido desde el compilador/interpretador de AppleScript a Finder para activarse.

Producción real

Sólo se imprime un AppleEvent, el que se envía al Finder:

AE2000 (4085 ): Enviando un evento:
------oo inicio del evento oo------
aevt('misc'\'actv' transactionID=0 sourcePSN=[0x0,e00e "Finder"] timeout=7200 eventSource=3 { &'subj':null(), &'csig':magn(65536) })
------oo fin del evento oo------

3voto

Eric Jones Puntos 3

tl;dr : Los componentes del lenguaje son sólo dependencias utilizadas por el ejecutable y se puede acceder a ellos a través del shell sin eventos de Apple.

A: Su argumento se rompe en un par de puntos que se han hecho en número 2.

a. "The Terminal command osascript does not "know" AppleScript."

De acuerdo, no tiene todos los idiomas que soporta autocontenidos en un solo ejecutable. Sin embargo, ahí es donde entran las dependencias, y cuando se piensa en ello de esa manera; no es demasiado preocupante que pueda acceder a las dependencias a través de su shell como cualquier otra aplicación puede.

b. "it passes it on to the AppleScript compiler/interpreter via the OSA architecture by sending out an AppleEvent."

"Cuando un componente de scripting ejecuta un script, las sentencias del script pueden provocar el envío de eventos Apple a las aplicaciones ( desarrollador.apple.com )".

El ejecutable no se limita a utilizar únicamente código dentro de sí mismo o una llamada a eventos de Apple. Al igual que casi todos los procesos o aplicaciones en su máquina, se basa en varias bibliotecas centrales y, específicamente, utiliza los componentes de lenguaje osa instalados en su sistema. No utiliza los eventos de Apple para pasar su script al componente de lenguaje.

ver los idiomas soportados:

❯ osalang 

estos componentes lingüísticos viven aquí:

❯ ls /System/Library/Components/

Desde osascript puede acceder a los componentes del lenguaje de su sistema directamente a través del shell, nunca verá un evento de Apple disparado sólo para procesar/interpretar la entrada script.

Por ejemplo, compare estos dos comandos en los que el primero utiliza el lenguaje AppleScript pero no interactúa con ninguna otra aplicación:

❯ osascript -e 'set myVar to "hello" & "world"'
helloworld

y la segunda donde le decimos al terminal que haga algo:

❯ osascript -e 'tell application "Terminal" to do script ("echo helloworld;")'
AE2000 (63917 ): Sending an event:
------oo start of event oo------
aevt('core'\'dosc' transactionID=0 sourcePSN=[0x0,dd7dd7 "Terminal"] timeout=7200 eventSource=3 { '----':utxt('utxt'(TEXT("echo helloworld;"))), &'subj':null(), &'csig':magn(65536) })
------oo  end of event  oo------
tab 1 of window id 32644

Sólo el que interactuaba con una aplicación, y no sólo el propio lenguaje AppleScript, provocaba un evento de Apple.

Lee esto artículo de nuevo y verás cómo esta explicación encaja ahora. La arquitectura OSA implementada a través de los eventos de Apple es la poderosa construcción que permite la automatización entre aplicaciones; pero la interpretación de la entrada script en sí misma sólo es realizada por el componente de lenguaje compatible de su sistema detrás de las escenas.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X