Comment faire fonctionner un fichier AppleScript existant en tant que service?

11

J'ai créé un AppleScript, je l'ai enregistré en tant que fichier dans un dossier spécifique sur mon disque dur. Maintenant, je veux lui attribuer un raccourci et il me semble que je dois créer un service via Automator, mais le Run AppleScriptme demande de mettre le code à l'intérieur, tandis que je veux exécuter le fichier .scpt déjà existant. Comment faire ça?

Nakilon
la source

Réponses:

9

Oui, Automator est la meilleure option ici. Pour créer le service, procédez comme suit:

  1. Ouvrez Automator et sélectionnez Service:

    entrez la description de l'image ici

  2. Recherchez 'applescript' et faites glisser l'action vers le volet droit:

    entrez la description de l'image ici

  3. Changez Service receives selected textpour Service receives no inputqu'il apparaisse toujours dans le menu Services:

    entrez la description de l'image ici

  4. Remplacez (* Your script goes here *)par:

    do shell script "/usr/bin/osascript /path/to/your/script.scpt"

    si vous souhaitez exécuter votre .scptfichier existant . Notez qu'osascript ne peut pas gérer l'interaction utilisateur comme l'affichage d'une fenêtre de dialogue:

    entrez la description de l'image ici

    Pour surmonter cette limitation, utilisez cette solution de contournement ou remplacez-la simplement (* Your script goes here *)par le contenu de votre script.

  5. Sauvegarde le:

    entrez la description de l'image ici

  6. Si vous le souhaitez, vous pouvez attribuer un raccourci à votre nouveau service. Sélectionnez Services> Préférences de services dans le Finder (ou toute application ouverte):

    entrez la description de l'image ici

  7. Attribuez un raccourci pas si commun:

    entrez la description de l'image ici

  8. Maintenant, votre service est accessible à partir de n'importe quelle application via le raccourci que vous avez attribué à l'étape précédente:

    entrez la description de l'image ici

Si vous souhaitez vous débarrasser du service ouvert ~/Library/Services, supprimez le service et videz la corbeille:

entrez la description de l'image ici

jaume
la source
J'ai dit que je voulais exécuter le fichier de script existant, ne pas le réécrire dans Automator.
Nakilon
Je pensais que copier / coller serait OK, mais oui, vous avez raison, c'est clairement indiqué dans votre question. Utilisez osascript, comme expliqué dans d'autres réponses.
jaume
@Nakilon J'ai ajouté comment utiliser osascriptdans Automator pour exécuter votre .scptfichier, une limitation et deux solutions de contournement.
jaume
Je viens de faire ça. Ça a marché; mais, il faut maintenant 4 à 5 secondes pour lancer le script. (Lorsque le code a été enregistré directement dans le flux de travail, il s'est lancé presque immédiatement.) Avez-vous une idée de la cause de ce problème ou comment le rendre plus rapide?
Zack
1
@Zack Merci, je ne sais pas pourquoi a osascriptbesoin de 4 secondes supplémentaires pour exécuter votre script, mais Automator n'est pas la cause du retard, ce qui était ma préoccupation. Vous voudrez peut-être déboguer osascript, consultez opensourcehacker.com/2011/12/02/… et stackoverflow.com/questions/31045575/…
jaume
4

Dans le script, ajoutez un on runargument:

on run
    -- do whatever the script does
end run

Ensuite, vous pouvez utiliser l'action Automator "Run Shell Script", avec la osascriptcommande:

osascript /path/to/script.scpt

osascriptest une commande qui exécute AppleScript dans le shell. Vous avez besoin des lignes du script pour permettre au script d'être exécuté en dehors de l'éditeur AppleScript.

alexwlchan
la source
1
Vous n'avez pas besoin d'inclure un gestionnaire d'exécution explicite. Tous les scripts ont un gestionnaire d'exécution implicite. La raison pour laquelle l'action Exécuter AppleScript d'Automator inclut un gestionnaire d'exécution explicite peut être parce qu'Automator utilise le on run {input, arguments}formulaire spécial , mais même dans Automator, vous pouvez simplement supprimer le gestionnaire d'exécution.
Lri
1
@ ͏͏͏ Je me demande si ce ping vous parvient. Bravo pour la sélection du nom de la création.
bmike
3

Vous voudrez peut-être jeter un œil à ce service , qui vous permet de «créer des services Mac OS X à partir de n'importe quel script».

Peter
la source
1
Pouvez-vous fournir une réponse ici plutôt qu'un simple lien
user151019
2

Je ne recommanderais pas de créer des services Automator pour attribuer des raccourcis aux scripts. Il y a un bogue dans 10.7 et 10.8 où les raccourcis clavier pour les services Automator ne fonctionnent pas toujours tant que vous n'avez pas survolé le menu des services dans la barre de menus. Il existe également un délai relativement long (peut-être de 0,1 à 1 s) avant l'exécution des services.

Voir cette réponse pour d'autres façons d'affecter des raccourcis clavier aux scripts. J'utilise FastScripts et Alfred moi-même.

Lri
la source
Je n'ai jamais ressenti ce besoin de planer? avez-vous plus de détails sur ce dont vous parlez
markhunte
1
Je ne sais pas si cela affecte toutes les installations OS X ou tous les services, mais je l'ai rencontré plusieurs fois sur différentes installations, et cela a été mentionné par d'autres personnes ici et chez Super User. Parfois, les raccourcis clavier de tous les services Automator cessent de fonctionner (ou rien ne se passe si vous les appuyez), mais ils recommencent à fonctionner si vous survolez le menu des services à partir de la barre de menus, ou si vous sélectionnez par exemple un service avec la souris.
Lri le
2

Vous pouvez exécuter le script existant avec un service d'automatisation simple comme celui-ci. Et attribuez votre raccourci à partir des raccourcis clavier normalement. N'oubliez pas que certaines applications doivent être relancées avant de prendre les raccourcis.

exemple.

Script sayHello:

say "hello"

Service d'automatisme: entrez la description de l'image ici

Qui dans cet exemple utilise:

  • Pas d'entrée
  • N'importe quelle application.

L'action est un script shell d'exécution Le code utilise simplement la commande unix osascript et le chemin d'accès au fichier. Passer l'entrée peut être à stdn ou à argument

C'est rien de spécial doit être fait pour le script.

Pour plus de détails sur la commande osascript, consultez les pages de manuel correspondantes. La page de manuel donne un autre exemple où vous pouvez passer des arguments au script.

markhunte
la source
0

Pour développer un service, vous avez besoin d'une sorte de logiciel qui créera un service tel que l'un des suivants:

  1. Automator pour créer un .workflow
  2. ThisService pour créer un .service
  3. Xcode pour créer un .app

Tous les types de services ci-dessus sont des packages. Ce sont tous des dossiers qui contiennent une liste qui spécifie les attributs d'un service.

Voici comment j'ai créé un service à l'aide d'Automator qui utilise une action "Exécuter AppleScript" Automator pour appeler un .script existant.

Service Automator qui appelle un AppleScript existant

Kaydell
la source