EXEC
[ Process = ] EXEC Command [ WAIT ] [ FOR { { READ | INPUT } | { WRITE | OUTPUT } } ] [ AS Name ]
EXEC Command TO Variable
Exécute une commande. Un objet interne
Process est créé pour gérer la commande.
Syntaxe standard
La
Command passée à EXEC doit être spécifiée soit comme une liste de constantes chaîne de caractères séparées par des virgules, soit comme un tableau.
Le premier élément de la liste/tableau est le nom de la commande, et les autres sont les paramètres optionnels de la commande.
-
Si
WAIT
est indiqué, alors l'interpréteur attend la fin de l'exécution de la commande. Sinon, la commande est exécutée en arrière plan.
-
SI
FOR
est spécifié, alors les entrées-sorties de la commande sont redirigées et c'est votre programme qui les intercepte :
-
Si
WRITE
est spécifié, vous pouvez envoyer des données a l'entrée standard de la commande en utilisant l'objet Process avec des instructions de sortie communes: PRINT, WRITE, ... Notez que vous avez besoin d'une référence vers l'objet Process pour cela.
-
Si
READ
est spécifié, alors les évènements seront générés chaque fois que la commande enverra des données vers son (flux) de sortie standard: l'évènement Read est généré quand les données sont envoyées au flux standard de sortie, et l'évènement Error est déclenché quand des données sont envoyées vers le flux d'erreur standard. Utilisez l’objet process avec les flux Fonctions de flux et d'entrée/sortie pour lire la sortie standard du processus.
Si vous utilisez les mots clef
INPUT
et
OUTPUT
au lieu de
READ
et
WRITE
, alors le processus est exécuté dans un terminal virtuel. Cela signifie que le processus va croire qu'il fonctionne dans un vrai terminal.
Nom
est le nom d'événement utilisé par l'objet
Process. Par défaut,
"Process"
est le nom utilisé.
Dans Gambas 3, il n’y a plus de nom d’évènement par défaut.
Autrement dit, vous devez ajouter
Pour avoir le même comportement que Gambas 2.
Vous pouvez avoir une référence vers l'objet interne
Process créé en utilisant une affectation.
Syntaxe courte
Si vous utilisez la deuxième forme de la syntaxe, la commande est exécutée, l'interprèteur attend la fin de son exécution, puis la sortie de la commande achevée ast placée dans la chaîne spécifiée.
Pendant l’exécution de la commande, vous n'avez aucun contrôle sur le déroulement du processus exécuté.
Environnement
Vous pouvez spécifier de nouvelles variables d'environnement pour le processus en exécution en utilisant le mot clé
WITH juste après l'argument
Command :
[ Process = ] EXEC Command WITH Environment ...
Environment est un tableau de chaînes, chacune ayant la forme suivante :
"NAME=VALUE"
.
NAME
est le nom de la variable d’environnement,
VALUE
est sa valeur.
Si vous voulez effacer une variable d’environnement, utilisez simplement la chaîne
"NAME="
.
Exemples
' Récupère le contenu d'un répertoire
EXEC [ "ls", "-la", "/tmp" ] WAIT
' Récupère le contenu d'un répertoire dans une chaîne de caractères
DIM sOutput AS String
EXEC [ "ls", "-la", "/tmp" ] TO sOutput
' Récupère le contenu d'un répertoire dans une chaîne de caractères, mais en arrière-plan
DIM sOutput AS String
' Un nom d'événement spécifique est utilisé
EXEC [ "ls", "-la", "/tmp" ] FOR READ AS "Contents"
...
PUBLIC SUB Contenu_Read()
DIM sLine AS String
READ #LAST, sLine, -256
sOutput &= sLine
END
PUBLIC SUB Contenu_Kill()
PRINT sOutput
END
Si vous voulez connaître combien d'octets vous pouvez lire dans un gestionnaire d'évènement
Process_Read
, utilisez la fonction
Lof.
Comme les arguments sont envoyés directement au processus, vous n'avez pas à les mettre entre guillemets, comme vous devez le faire avec le shell.
Exemples
' perl -e 'print while <>;' devient
EXEC [ "perl", "-e", "print while <>;" ] FOR READ WRITE
Voir aussi