# Lancer un applescript depuis un applescript



## titigrou (4 Février 2017)

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

```
if condition 1
Lancer Applescript 1
else
Lancer Applescript 2
End if
```
Merci d'avance pour vos réponses.
Antoine


----------



## nicolasf (5 Février 2017)

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)


```
run script nom-script
```

On peut aussi interagir avec le script externe comme ceci :


```
set unAutreScript to load script nom-script
tell unAutreScript
    -- Interactions
end tell
```


----------



## titigrou (5 Février 2017)

Hello!
Merci pour ta réponse Nico!
J'ai essayé ça du coup

```
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

```
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!


----------



## zeltron54 (5 Février 2017)

Essai avec:
set nom_script to "/Users/Antoine/Documents/Scripts/"Sans titre 2.scpt"" as string
run script nom_script


----------



## titigrou (5 Février 2017)

J'ai essayé avec

```
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  
Etrange!


----------



## zeltron54 (5 Février 2017)

Un problème sur ton mac ou dans ta session. chez moi pas de problème.


----------



## titigrou (5 Février 2017)

Je peux pas faire un RAZ des préférences de la session ou de l'éditeur AS?


----------



## zeltron54 (5 Février 2017)

Tu pourrais déjà essayer dans une autre session pour savoir si c'est l'appli ou juste ta session qui pose problème.


----------



## nicolasf (6 Février 2017)

titigrou a dit:


> J'ai essayé avec
> 
> ```
> set nom_script to "/Users/Antoine/Documents/Scripts/Test01.scpt" as string
> ...



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.


----------



## titigrou (6 Février 2017)

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


----------



## titigrou (6 Février 2017)

Par contre je viens de me rendre compte d'un truc!
Mon code ressemble à ça

```
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

```
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


----------



## nicolasf (6 Février 2017)

titigrou a dit:


> Par contre je viens de me rendre compte d'un truc!
> Mon code ressemble à ça
> 
> ```
> ...



C'est possible !

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


```
run script nom_script with parameters {"bla"}
```

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


```
on run {variable}
   set qqchose to variable
   -- ETC
end run
```


----------



## titigrou (6 Février 2017)

J'ai mis en programme principal (l'appelant)

```
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é


```
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.


----------



## nicolasf (6 Février 2017)

Euh, alors là, comme ça, je sèche. Peut-être que c'est un bug, ou alors c'est prévu comme ça ? 

En même temps, je comprends pas trop l'idée. Pourquoi changer la variable dans le script appelé ?


----------



## titigrou (6 Février 2017)

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


----------



## nicolasf (6 Février 2017)

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…


----------



## JacqR (6 Février 2017)

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​

```
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​

```
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
```


----------

