Lancer un applescript depuis un applescript

titigrou

Membre expert
Club iGen
23 Décembre 2004
1 091
26
40
Lille
Hello,

Je me demandais si il était possible, dans un script Applescript, de faire appel à un autre script pour l'exécuter.
En gros pour faire quelque chose comme ceci
Bloc de code:
if condition 1
Lancer Applescript 1
else
Lancer Applescript 2
End if
Merci d'avance pour vos réponses.
Antoine
 
Bonjour

Oui, c’est tout à fait possible !

Pour lancer un script sans interagir avec lui, il suffit d’utiliser ceci (où nom-script est un alias vers le script, je crois que c’est obligatoire)

Bloc de code:
run script nom-script

On peut aussi interagir avec le script externe comme ceci :

Bloc de code:
set unAutreScript to load script nom-script
tell unAutreScript
    -- Interactions
end tell
 
Hello!
Merci pour ta réponse Nico!
J'ai essayé ça du coup
Bloc de code:
set nom_script to alias (("/Users/Antoine/Documents/Scripts/" as text) & "Sans titre 2.scpt")
run script nom_script
et ça me dit
Le fichier alias /Users/Antoine/Documents/Scripts/Sans titre 2.scpt of «script» est introuvable.
J'ai fait un glisser déposer du script pour être sur du path.
Tu as une idée?

EDIT
J'ai modifié en le mettant sur le bureau et avec ce code
Bloc de code:
set nom_script to alias ((path to desktop as text) & "Sans titre 2.scpt")
run script nom_script
et là ça me plante l'éditeur de script direct!
 
Dernière édition:
Essai avec:
set nom_script to "/Users/Antoine/Documents/Scripts/"Sans titre 2.scpt"" as string
run script nom_script
 
J'ai essayé avec
Bloc de code:
set nom_script to "/Users/Antoine/Documents/Scripts/Test01.scpt" as string
run script nom_script
et ça me plante l'éditeur directement! J'ai essayé dix fois de suite, dix fois la même chose :D
Etrange!
 
Un problème sur ton mac ou dans ta session. chez moi pas de problème.
 
Tu pourrais déjà essayer dans une autre session pour savoir si c'est l'appli ou juste ta session qui pose problème.
 
J'ai essayé avec
Bloc de code:
set nom_script to "/Users/Antoine/Documents/Scripts/Test01.scpt" as string
run script nom_script
et ça me plante l'éditeur directement! J'ai essayé dix fois de suite, dix fois la même chose :D
Etrange!

C'est pas le script que tu lances qui fait planter ? Essaie avec quelque chose de très simple, une boîte de dialogue seulement par exemple.
 
Ca marche!
En fait j'avais pas fait gaffe mais j'appelais le script appelant... Erreur de débutant pour un jeune padawan que je suis!
Merci encore!
Ca va alléger mon code considérablement!!
Antoine
 
Par contre je viens de me rendre compte d'un truc!
Mon code ressemble à ça
Bloc de code:
if Parametre_1 = "Suppression" then
  
    set Lancer_script_suppression_et_ajout to "/Users/Antoine/Desktop/Script1.scpt" as string
    run script Lancer_script1
else
    set Lancer_script_suppression_et_ajout to "/Users/Antoine/Desktop/Script2.scpt" as string
    run script Lancer_script2
end if

display dialog variable_test
Je passe automatiquement dans le cas Script1.scpt
et la variable "variable_test" est définie dans Script1.scpt
Bloc de code:
set variable_test to "Variable de test transmise correctement"

Par contre, j'aimerai que le contenu de cette variable passe dans le programme principal pour la suite du traitement.
C'est possible ou j'en demande trop à AS? En PHP je sais que c'est faisable (et heureusement!), mais en AS je pense sais pas!

Du coup peut être qu'il existe, comme en Cobol, un truc du genre
If condition1
Perform Script1
else
Perform Script2
end if
 
Dernière édition:
Par contre je viens de me rendre compte d'un truc!
Mon code ressemble à ça
Bloc de code:
if Parametre_1 = "Suppression" then
  
    set Lancer_script_suppression_et_ajout to "/Users/Antoine/Desktop/Script1.scpt" as string
    run script Lancer_script1
else
    set Lancer_script_suppression_et_ajout to "/Users/Antoine/Desktop/Script2.scpt" as string
    run script Lancer_script2
end if

display dialog variable_test
Je passe automatiquement dans le cas Script1.scpt
et la variable "variable_test" est définie dans Script1.scpt
Bloc de code:
set variable_test to "Variable de test transmise correctement"

Par contre, j'aimerai que le contenu de cette variable passe dans le programme principal pour la suite du traitement.
C'est possible ou j'en demande trop à AS? En PHP je sais que c'est faisable (et heureusement!), mais en AS je pense sais pas!

C'est possible !

Côté script appelant, c'est tout bête :

Bloc de code:
run script nom_script with parameters {"bla"}

Côté script appelé, il faut utiliser quelque chose comme ça :

Bloc de code:
on run {variable}
   set qqchose to variable
   -- ETC
end run
 
J'ai mis en programme principal (l'appelant)
Bloc de code:
set parametre_1 to "suppression"
set variable_de_test to "Valeur01"

if parametre_1 = "Suppression" then
    display dialog "Suppression"
    set Lancer_script_suppression_et_ajout to "/Users/Antoine/Desktop/SC01.scpt" as string
    run script Lancer_script_suppression_et_ajout with parameters {variable_de_test}
end if
display dialog variable_de_test

et dans le sous programme appelé

Bloc de code:
on run {variable_de_test}
   
    set variable_de_test to "Valeur02"
    display dialog "Valeur de variable_de_test dans le sous programme:" & variable_de_test
end run

et le display dialog variable_de_test à la fin du programme appelant me met Valeur01 (alors que celui dans le programme appelé mets bien Valeur02.
 
Bah en gros mon traitement se fait dans le script appelé, et il devra transmettre le résultat du traitement dans le programme principal qui lui se chargera d'écrire dans un fichier de sortie le résultat des variables traitées dans le script appelé.
C'est surtout histoire de pas avoir un script unique de 1000 lignes, et de rendre ça plus "propre" et compréhensible
 
Ah OK je comprends.

C'est logique quand je vois le code. La valeur 2 doit être renvoyée dans le premier script pour que cela fonctionne. Mais je sais pas si on peut faire une boucle comme ça, sans tout casser…
 
Bonjour,

Il faut un return dans la function "On run {}", et il faut que tu récupère le résultat de la commande "run script".

Example :

programme principal​
Bloc de code:
set parametre_1 to "suppression"
set variable_de_test to "Valeur01"

if parametre_1 = "Suppression" then
    set Lancer_script_suppression_et_ajout to "/Users/jack/Desktop/SC01.scpt"
    -- on appelle le script et on récupère le résultat de la commande (il sera dans la variable 'variable_de_test')
    set variable_de_test to run script Lancer_script_suppression_et_ajout with parameters {variable_de_test}
end if
display dialog variable_de_test

sous programme​
Bloc de code:
on run {variable_de_test}
    display dialog "Valeur de variable_de_test dans le sous programme:" & variable_de_test
    return "Valeur02" -- ceci retournera ce texte à la commande 'run script' du programme principal
end run