Frage

Ich lerne ein TCL (erwarten) Skripte zu schreiben und ich feststellen, dass einige Beispiele zeigen, Laich zu verwenden, während andere den Befehl exec zeigen. Ich habe versucht, googeln, aber nicht finden kann, was der Unterschied ist?

Angenommen, ich in einer Mitte eines langen erwarten Skript ‚exec‘ nennen, was kann ich passieren erwarten?

War es hilfreich?

Lösung

spawn ist ein expect Befehl kein tcl Befehl. exec ist ein tcl Befehl.

spawn erstellt einen Prozess. Die Prozesse Eingang und Ausgang verbunden für die Verwendung durch die anderen erwarten Befehle erwarten:. send, expect und interact

exec schafft eine subprocess unter tcl. Im allgemeinen wird die tcl ausgesetzt, bis die subprocess abgeschlossen ist. Allerdings ist eine können erstellen die subprocess im Hintergrund (mit & als letztes Argument) und wenn man den Eingang und Ausgang korrekt bis Haken, tcl mit dem Subprozess interagieren. Dies ist sehr umständlich und ist genau die Art von Interaktion, wurde entwickelt, erwartet sanft zu behandeln.

Andere Tipps

Ein einfacher Weg, um die Frage zu beantworten ist Umformulierung es zu fragen, wenn Sie exec vs Laich verwenden sollten. Kurz gesagt, verwenden Laich für interaktive Befehle und exec für nicht-interaktive Befehle.

Es ist auch erwähnenswert, dass einige (viele?) Programme anders verhalten, wenn sie von einem Benutzer (dh in der Befehlszeile) läuft vs aus einem anderen Prozess Teil eines Batch-Prozess / laufen wird. Der eigentliche Unterschied ist, ob es ein Terminal an den Prozess angehängt ist.

Der Laich Befehl, ein Teil der Expect Erweiterung Tcl, setzt die Dinge so das ausgeführte Programm versteht sich als von einem Benutzer ausgeführt, und dann fügt Funktionalität der tcl-Programm zu ermöglichen, mit dem externen Programm auf bequeme Weise zu interagieren ( dh passend zu dessen Ausgabe über reguläre Ausdrücke und zweigen diese Ursachen). Dinge über Laich ausgeführt werden laufen asynchron.

Der Befehl exec ist ein Kern Tcl-Befehl, der das andere Programm läuft, zurückkehr es ausgegeben ist. Es ist nicht der komplizierten Setup tun, das tut laichen, aber kann sehr nützlich sein für nur ein Programm laufen und zu sehen, es ist ausgegeben (und es ist Return-Code). Dinge von exec ausgeführt werden, standardmäßig synchron laufen, aber ein kaufmännischen am Ende des Befehls bewirkt, dass es im Hintergrund (ähnlich wie traditionelles Shell-Scripting).

ausgeführt werden

Der Befehl zum Öffnen, während in der Regel Dateien verwendet lesen / schreiben, kann auch verwendet werden, um externe Prozesse zu laufen. Durch die vor dem Befehlsnamen mit dem Pipe (|) Symbol, sagen Sie ihm einen externen Prozess zu laufen, und den Zugang zu gewinnen / Schreib-Datei-Deskriptoren lesen mit dem resultierenden Prozess zu interagieren. Dies ist eine Art Mittelweg zwischen exec und Laich, mit viel mehr Interaktion mit dem Prozess zur Verfügung, aber ohne den komplizierten Umwelt Setup, das Laichen des Fall ist. Es kann sehr nützlich sein für Programme interagieren, die eingegeben werden müssen, aber noch recht gut Setup für die Automatisierung.

Soweit ich weiß, gibt Laich eine Prozess-ID (und Links mit Expect), während exec nur die letzten stdout zurück, es sei denn, Sie passieren „&“. So wird es nicht Ihre erwartet beeinflussen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top