¿Por qué este Applescript a menudo falla la primera vez, pero siempre funciona después de eso?

El siguiente Applescript abre una aplicación de menu llamada QuickHue y luego hace clic en un elemento especificado en el menu. A menudo, cuando uso AppleScript, no hace nada. Pero si espero un momento o dos y vuelvo a intentarlo, funciona perfectamente. Y sigue funcionando. Pero si pasa algo de time y lo disparo de nuevo, volverá a fallar la primera vez. Después de eso, funciona como un campeón. Aquí está el AppleScript. ¿Alguna idea de lo que está pasando aquí?

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 

  • Script de Apple para bloquear la computadora usando knock
  • Haga que una biblioteca de iTunes XML funcione en un server NAS
  • Copiar text de una página web en el editor de text
  • La aplicación AppleScript comenzó a solicitar que se ejecute o se cierre. ¿Cómo puedo desactivar esto?
  • Buenos / inspiradores usos de la automation en Mac OS X
  • Flujo de trabajo de AppleScript / Automator para restaurar el estado operativo de OS X
  • Haga doble clic en AppleScript
  • ¿Cómo agregar un file AppleScript a la barra de herramientas del Finder para ejecutar AppleScript?
  • ¿Cómo puedo usar AppleScript para decirle a TextEdit que adjunte un file?
  • AppleScript: ¿Cómo hacer doble clic y hacer clic con el button derecho en la location del cursor?
  • ¿Es posible que un file .app de AppleScript conserve su icono personalizado, incluso después de que se hayan hecho modificaciones en el código?
  • ¿Cómo puedo tener un order fijo de los extras del menu?
  • 2 Solutions collect form web for “¿Por qué este Applescript a menudo falla la primera vez, pero siempre funciona después de eso?”

    Tal vez pueda escribir un ciclo que haga un seguimiento de si el script ha tenido éxito o no y sigue intentándolo hasta que lo haya hecho (o haya pasado algún time de corte). Si el problema es que los events del sistema no se han iniciado completamente, entonces el ciclo podría preguntar a los events del sistema si los events del sistema de la aplicación se están ejecutando. Aquí hay una function simple que podrías usar:

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

    Solo para asegurarse de que se ha puesto en marcha por completo, puede implementar su retraso después del ciclo.

    Así es como se vería la function de bucle:

     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 

    O tal vez tenga alguna otra forma de determinar la ejecución exitosa del script … ¿hay algún estado que pueda verificar para determinar el éxito? De ser así, podría realizar un bucle hasta que se cumpla esa condición en lugar de que se inicie el evento del sistema.

    Otra cosa es que no sé si los events del sistema tienen que "registrarse" con AppleScript antes de que se dispare un AppleScript para que funcione. Si lo hace, entonces puede intentar esto: puede crear un script de ayuda por separado que inicie los events del sistema y luego ejecute el script de esta manera:

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

    Déjame saber como va. Con frecuencia tengo el mismo problema que tú con algunos de mis scripts. Simplemente no lo he intentado todavía.

    Buena suerte, Rob

    Tienes razón, no lo probé lo suficientemente bien. El error se mostró cuando los Eventos del sistema no se estaban ejecutando. Como otra solución alternativa, agregué la launch application "System Events" y delay 0.2 al comienzo:

     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 

    Si todavía no funciona, intente boost los retrasos.

    Loving Apple Products like poisoning (iPhone, iPad, iMac, Macbook, iWatch).