1 votos

¿Es posible cerrar un script con una pulsación de tecla?

En AutoHotKey, el uso de la palabra clave "ExitApp" puede permitir al usuario detener un scriptcon una pulsación de tecla. Por ejemplo, Esc::ExitApp puede detener un script pulsando "esc".

Ahora, con una combinación de do shell script (utilizando una función bash como read ) y on idle y luego llamar a exit De alguna manera, pensé que esto era posible en AppleScript. Sin embargo, dentro de una función de Automator, no se puede guardar un AppleScript como "permanecer abierto" - pegando el on idle lo que hay debajo on run sólo hace un bucle de inactividad una vez sin ofrecer oportunidades para escuchar las pulsaciones de las teclas. ¿Alguna idea?

Ejemplo: Digamos que tengo este script en un flujo de trabajo de Automator:

on run {input, parameters}
    set i to 0
     repeat while i < 100
       keystroke "a"
       set i to i + 1
       delay 5
     end repeat
end run

0 votos

¿Por qué utiliza Autómata ejecutar AppleScript ¿existen otros acciones que ocurre antes/después y que necesita que se realice junto con el AppleScript ?

0 votos

Es posible que haya que cerrarlo. ¿Puedes editar en el post un script que sea elegible para ser detenido? El manejo de interrupciones y los bucles principales son más un modismo de swift y Objective-C y los script se ejecutan hasta su finalización generalmente. Pasar señales a través de tuberías con nombre a veces funciona para script shell puros, pero no entiendo por qué se eligen shell y AppleScript para este problema.

0voto

wch1zpink Puntos 11

No estoy muy seguro de si mi solución le ayudará o no.

Tengo un montón de diferentes AppleScripts adjunta a las carpetas mediante el uso de Acciones de la carpeta y también ejecutar AppleScripts directamente desde el menú script de la barra de menús .

De vez en cuando uno de mis AppleScripts decide portarse mal y se congela o se queda atascado e intenta dejar de AppleScript desde el engranaje giratorio de la barra de menú tampoco funciona.

Mi solución en estas circunstancias es ejecutar lo siguiente AppleScript código.

tell application "System Events"
    set pidList to unix id of application processes whose name is "osascript"
end tell

set text item delimiters to space
do shell script ({"kill -9", pidList} as text)
set text item delimiters to ""

He guardado el AppleScript como un archivo .scpt y ejecutarlo con Comandos de voz pero también se puede utilizar el código en un nuevo A Acción rápida de utomator y luego asignarle un atajo de teclado en las Preferencias del Sistema.


NOTA: Uno de los inconvenientes de esta solución es que si está ejecutando varios scripts al mismo tiempo, esto forzará el cierre de cada uno. Hasta donde yo sé, no hay manera de saber qué osascript pertenece a la que se ejecuta AppleScript . (No saber cuál es cuál me obliga a forzar la salida de cada uno).

De nuevo, no sé si algo de esto te ayudará o no. Si no es así, tal vez te ayude a tener algunas ideas.

0 votos

Hm... cuando registro el pidList usando script editor, no hay resultados. Es bastante extraño - ¿alguna idea de lo que podría estar mal?

0 votos

Además, intenté hacer ps -ax | grep "osascript" y por alguna extraña razón la salida se veía igual tanto si se estaba ejecutando una acción rápida de automator como si no. imgur.com/a/z9bjohd

0 votos

@Aaron Para que el código funcione, lo que se está ejecutando tiene que ser un archivo .scpt. No un script guardado como una aplicación o un flujo de trabajo de Automator o ejecutar un script a través de script Editor. Esa fue la razón por la que incluí la segunda frase en la parte superior de mi post.

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