0 votes

Appel d'une routine AppleScript avec osascript

Étant donné le code AppleScript suivant

on myHandler()
    display dialog ("I'm your Handler!")
end myHandler

Comment puis-je appeler myHandler de osascript (en utilisant Terminal ), simple sans paramètres, mais aussi avec ?

0 votes

Voir cette question : apple.stackexchange.com/q/257541/119271 Techniquement, c'est une question sans rapport, mais mon code fait ce que vous demandez.

0 votes

Mais comment appeler dynamiquement une sous-routine à partir des arguments de la ligne de commande ?

0 votes

Le site run peut accepter des arguments, consultez ma réponse à l'adresse suivante stackoverflow.com/a/57648526/10853463

2voto

OnePablo Points 1
on myHandler()
   display dialog ("I'm your Handler!")
end myHandler

Comment appeler myHandler depuis osascript (en utilisant le Terminal)

En supposant que votre shell est bash o zsh Il existe plusieurs façons de procéder, en fonction de vos besoins ou de vos préférences. Vous pouvez envoyer votre code directement, ce qui ne nécessite qu'une ligne supplémentaire en bas de page dans ce cas pour appeler le gestionnaire afin d'exécuter son code (tout comme vous l'avez fait dans votre code Python : "{applescript.read()}\nmyHandler()" ) :

osascript <<-'osa'
    on myHandler()
        display dialog ("I'm your Handler!")
    end myHandler

   myHandler()
osa

Si vous stockez votre script dans un fichier situé à l'adresse suivante ~/Documents/myscript.applescript puis vous pouvez passer le fichier dans osascript comme ça :

osascript ~/Documents/myscript.applescript

Bien sûr, vous devrez toujours inclure l'appel à votre gestionnaire dans votre fichier .applescript c'est-à-dire une ligne supplémentaire à la fin ou au début de votre script qui dit simplement myHandler()

Si vous vouliez passer un paramètre de ligne de commande pour rendre le contenu du dialogue plus dynamique, vous pouvez modifier votre script pour qu'il ressemble à ceci :

property text item delimiters: space

on run input as text
    myHandler(input)
end run

on myHandler(msg as text)
    local msg
    display dialog msg
end myHandler

Puis appelez-le depuis la ligne de commande comme ceci :

osascript ~/Documents/myscript.applescript "It worked!"

Avec un peu de chance, si j'ai anticipé correctement la mise en place de mon exemple de script, cela devrait fonctionner sans les guillemets :

osascript ~/Documents/myscript.applescript Do these words have a space between them \?

0voto

5t4cktr4c3 Points 3

J'ai trouvé une solution de contournement. Pas propre, mais ça marche. Dans mon cas avec Python :

import subprocess

with open("script.scpt") as applescript:
    subprocess.run(["/usr/bin/osascript", "-e", f"{applescript.read()}\nmyHandler()"])````

0 votes

Beurk ! Non, ne faites pas ça. Je vais poster une réponse maintenant. C'est très simple une fois que vous savez comment faire.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X