Quelle est la différence entre spawn et exec?
Je suis en train d'apprendre à écrire un TCL (attendre) les scripts et j'ai remarqué que certains exemples montrent à l'utilisation de spawn, tandis que d'autres montrent la commande exec. J'ai essayé de googler, mais ne peut pas trouver quelle est la différence?
Supposons que j'appelle 'exec' au milieu d'un long script expect, que puis-je attendre?
source d'informationauteur Milan Babuškov
Vous devez vous connecter pour publier un commentaire.
spawn
est unexpect
commande pas untcl
de commande.exec
est untcl
commande.spawn
crée un processus. Le processus d'entrée et de sortie sont connectés à attendre pour une utilisation par les autres attendent des commandes:send
expect
etinteract
.exec
crée un sous-processus en vertu de la tcl. En général, le tcl est suspendu jusqu'à ce que le sous-processus se termine. Cependant, un peut créer le sous-processus en arrière-plan (à l'aide de & comme le dernier argument) et si l'on raccorde l'entrée et la sortie correctement, tcl peut interagir avec le processus secondaire. C'est très maladroit et c'est exactement le genre de l'interaction qui s'attendent a été conçu pour gérer en douceur.Une façon plus simple de répondre à la question de la reformuler pour poser lorsque vous devez utiliser exec vs spawn. En bref, l'utilisation de spawn pour les commandes interactives et exec pour les non-interactive commandes.
Il est également intéressant de noter que certains (beaucoup?) les programmes se comportent différemment lorsqu'il est exécuté par un utilisateur (c'est à dire, sur la ligne de commande) vs faire partie d'un processus de traitement par lots/exécution d'un autre processus. La différence réelle est de savoir si il y a un terminal attaché au processus.
La commande spawn, une partie de l'Attendre extension de Tcl, met les choses en place de sorte que le programme exécuté voit lui-même exécuté par un utilisateur, puis ajoute des fonctionnalités pour permettre au programme tcl pour interagir avec le programme externe d'une manière très pratique (c'est à dire, de la correspondance, c'est la sortie via des expressions régulières et de branche en dehors de ces matchs). Les choses se passent via spawn sont exécutées de manière asynchrone.
La commande exec est l'un des principaux Tcl commande qui exécute l'autre programme, le retour c'est sortie. Il ne fait pas de la complexité de la configuration de spawn, mais elles peuvent être très pratique pour la simple exécution d'un programme et de voir qu'elle est sortie (et c'est le code retour). Les choses par exec sont, par défaut, exécutez de manière synchrone, mais une esperluette à la fin de la commande entraîne pour qu'il soit exécuté en arrière-plan (un peu comme les scripts shell).
La commande d'ouverture, alors que généralement, utilisé pour lire/écrire des fichiers, peut également être utilisé pour exécuter des processus externes. En faisant précéder le nom de la commande avec le pipe (|) symbole, vous lui demandez d'exécuter un processus externe, et d'avoir accès à la lecture/écriture de fichiers descripteurs d'interagir avec le processus qui en résulte. C'est une sorte de juste milieu entre l'exec et spawn, avec beaucoup plus d'interaction avec le processus, mais sans la complexité de l'environnement d'installation qui apparaissent. Il peut être extrêmement utile pour interagir avec les programmes qui nécessitent l'entrée, mais sont encore assez bien le programme d'installation de l'automatisation.
Autant que je sache, frayer renvoie un ID de processus (et les liens avec les Attendre), alors que la fonction exec retourne juste la dernière sortie standard (stdout), sauf si vous passez "&". Afin de ne pas affecter votre attend.