Question

J'apprends à écrire un script TCL (attendre) et je remarque que quelques exemples montrent à utiliser spawn, tandis que d'autres montrent la commande exec. J'ai essayé googler, mais ne trouve pas quelle est la différence?

Supposons que j'appelle « exec » au milieu d'un script attendre longtemps, que puis-je me attendre?

Était-ce utile?

La solution

spawn est une commande expect pas une commande tcl. exec est une commande de tcl.

spawn crée un processus. L'entrée et la sortie des processus sont connectés à attendre pour une utilisation par les autres attendent commandes. send, expect et interact

exec crée un sous-processus sous tcl. En général, la tcl est suspendue jusqu'à ce que le sous-processus se termine. Cependant, un peut créer le sous-processus en arrière-plan (à l'aide et que le dernier argument) et si l'on crochets correctement l'entrée et la sortie, tcl peut interagir avec le sous-processus. Ceci est très maladroit et est exactement le genre d'interaction qui a été conçu pour attendre en gérer en douceur.

Autres conseils

Une façon plus simple de répondre à la question est reformulant de demander quand vous devez utiliser exec vs spawn. En bref, utiliser la rogue de commandes interactives et pour les commandes exec non interactifs.

Il est également intéressant de noter que certains (beaucoup?) Programmes se comportent différemment lorsqu'il est exécuté par un utilisateur (par exemple, à la ligne de commande) vs faisant partie d'un processus de traitement par lots / exécuter à partir d'un autre processus. La différence réelle est de savoir s'il y a un terminal connecté à ce processus.

La commande spawn, une partie de l'extension expect Tcl, met les choses de sorte que le programme exécuté se considère comme exécutée par un utilisateur, et ajoute des fonctionnalités pour permettre au programme de tcl d'interagir avec le programme externe de manière pratique ( à-dire, correspondant à sa sortie par des expressions régulières et bifurquent ces matchs). Les choses sont gérées par spawn fonctionnent de manière asynchrone.

La commande exec est un noyau Tcl commande qui exécute l'autre programme, en revenant sa sortie. Il ne fait aucun de la configuration complexe qui fraient fait, mais peut être très pratique pour juste lancer un programme et de voir sa sortie (et son code retour). Les choses sont gérées par le Comité exécutif, par défaut, exécutez de manière synchrone, mais une esperluette à la fin de la commande, il provoque à exécuter en arrière-plan (un peu comme les scripts shell traditionnels).

La commande ouverte, tout en étant 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 tube (|) symbole, vous dites à exécuter un processus externe, et d'accéder à lecture / descripteurs de fichiers d'écriture pour interagir avec le processus résultant. C'est en quelque sorte un juste milieu entre exec et se reproduire, avec beaucoup plus d'interaction avec le processus disponible, mais sans la configuration de l'environnement complexe qui fraient fait. Il peut être très pratique pour interagir avec les programmes qui nécessitent une intervention, mais encore assez bien la configuration pour l'automatisation.

Pour autant que je sache, spawn retourne un ID de processus (et des liens dans de expect), tandis que exec retourne juste la stdout finale, à moins que vous passez « et ». Donc, il ne sera pas affecter votre attend.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top