He descubierto otro método para reiniciar un AppleScript.
Este método no es "mejor" que los otros métodos que se han proporcionado; es simplemente una forma más de acercarse a las cosas. Aquí le mostramos cómo puede reiniciar un archivo .scpt en AppleScript:
if buttonChoice is "Start over" then
run script "/Users/Me/Desktop/My script.scpt"
error number -128 (* user cancelled *)
end if
O, alternativamente:
if buttonChoice is "Start over" then
run script (path to me)
error number -128 (* user cancelled *)
end if
Este código simplemente crea otra instancia del archivo .scpt de AppleScript que se ejecuta actualmente, y luego cierra la instancia actual.
Aprendí sobre run script
a partir de un comentario del usuario Camelot en la siguiente página web:
Llame a otro AppleScript | Comunidades de Apple
Con la misma premisa subyacente, si desea reiniciar un archivo .app usando AppleScript, use esto:
if buttonChoice is "Start over" then
do shell script "open -n " & quoted form of "/Users/Me/Desktop/My app.app"
error number -128 (* user cancelled *)
end if
O, alternativamente:
if buttonChoice is "Start over" then
do shell script "open -n " & (quoted form of (POSIX path of (path to me)))
error number -128 (* user cancelled *)
end if
El -n
permite abrir una nueva instancia de la aplicación, incluso si ya se está ejecutando una instancia de esta aplicación. El -n
es necesario porque, prácticamente hablando, la aplicación AppleScript se cierra técnicamente después de que se haya creado la segunda instancia, aunque puede que este no sea el caso basado en lo que se ve en su pantalla.
¿Cuándo debería uno usar este método de reinicio?
Esto va a ser un poco confuso, así que ten paciencia ...
Tengo un archivo .scpt de AppleScript que se ejecuta automáticamente cuando mi computadora se despierta. (Uso SleepWatcher para lograr esto.)
Este archivo .scpt llama a una subrutina específica de un archivo .scpt diferente; omite toda la secuencia de comandos y solo ejecuta el código que se encuentra en una subrutina específica. (Para lograr esto, yo uso el método descrito aquí .)
Este segundo archivo .scpt está repleto de botones "Comenzar de nuevo" en casi todos los cuadros de diálogo, empleando:
return on run
para lograr el efecto de reinicio. (Este método de reinicio se proporcionó en una respuesta anterior a esta pregunta).
Ahora, el problema es que, mientras mi primer archivo .scpt se reinicia con éxito , el segundo archivo .scpt cuando se usa return on run
en el segundo archivo .scpt, una vez que el script ha finalizado , se presenta al usuario un cuadro de diálogo que contiene el siguiente error:
«script» no entiende la "devolución"
Para ser justos, este error tiene sentido; el primer archivo .scpt no puede comprender completamente el significado de return
, porque nunca ejecutó realmente el otro script. Solo estaba ejecutando una subrutina del otro script.
Este error me molestó. Así que, jugué un poco más con el código y aprendí sobre run script
. El tipo específico de escenario que acabo de explicar es donde realmente brilla el método run script
restart.
El método simple run script
salva el día: reinicia el segundo archivo .scpt y sin tener que invocar el comando return
en el proceso. Por lo tanto, este método está completamente libre de errores, incluso cuando se ejecuta fuera de su código circundante más grande. Este es el único método en esta página que puede hacer esto, ya que los otros métodos dependen de return
.