Domanda

Sto imparando a scrivere TCL script (aspettare) e ho notato che alcuni esempi di utilizzare uova, mentre altri mostrano il comando exec. Ho provato googling, ma non riesco a trovare qual è la differenza?

Supponiamo che io chiamo 'exec' in un bel mezzo di uno script di lunga aspettarsi, cosa posso aspettare che accada?

È stato utile?

Soluzione

spawn è un non comandi expect un comando tcl. exec è un comando tcl.

spawn crea un processo. ingresso e uscita dei processi sono collegati aspettarsi per uso all'altra aspettano comandi:. send, expect e interact

exec crea un sottoprocesso sotto TCL. In generale la TCL è sospeso fino al completamento sottoprocesso. Tuttavia, un possono creare il sottoprocesso in background (utilizzando & come ultimo argomento) e se si aggancia l'input e l'output correttamente, TCL può interagire con il sottoprocesso. Questo è molto goffo ed è esattamente il tipo di interazione che si aspettano è stato progettato per gestire senza problemi.

Altri suggerimenti

Un modo più semplice di risolvere la questione è riformulazione a chiedere quando si dovrebbe usare exec vs deporre le uova. In breve, utilizzare micelio per i comandi interattivi e exec per i comandi non interattivi.

E 'anche importante notare che alcuni (molti?) Programmi funzionano in modo diverso quando eseguito da un utente (ad esempio, nella riga di comando) vs far parte di un processo batch / eseguito da un altro processo. La differenza reale è se c'è un terminale collegato al processo.

Il comando escursione, parte dell'estensione Aspettatevi di Tcl, prepara le cose in modo che il programma eseguito si considera gestito da un utente, e poi aggiunge funzionalità per consentire al programma TCL di interagire con il programma esterno in un modo conveniente ( vale a dire, di corrispondenza è uscita tramite espressioni regolari e si diramano le partite). Le cose gestite tramite uova vengono eseguiti in modo asincrono.

Il comando exec è un comando nucleo di Tcl che corre l'altro programma, restituendo il suo output. Non fa alcuna del setup complicato che depongono le uova fa, ma può essere molto utile per solo in esecuzione di un programma e di vedere il suo output (ed è codice di ritorno). Cose gestiti da Exec sono, per impostazione predefinita, eseguiti in modo sincrono, ma una e commerciale alla fine del comando provoca ad essere eseguito in background (molto simile scripting di shell tradizionale).

Il comando di apertura, mentre in genere utilizzato per leggere / scrivere file, può anche essere utilizzato per eseguire processi esterni. Facendo precedere il nome del comando con la pipe (|) il simbolo, si dice di eseguire un processo esterno, e ottenere l'accesso di lettura / scrittura descrittori di file di interagire con il processo risultante. Questa è una sorta di via di mezzo tra exec e deporre le uova, con molta più interazione con il processo a disposizione, ma senza la complicata configurazione ambientale che depongono le uova fa. Può essere estremamente utile per interagire con i programmi che richiedono l'input, ma sono ancora abbastanza ben messa a punto per l'automazione.

Per quanto ne so, uova restituisce un ID di processo (e collegamenti in con Aspettatevi), mentre exec solo restituisce lo stdout finale, a meno che non si passa "&". In modo da non influenzare l'aspetta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top