autoexpect - kézikönyv, opciók, parancspéldák


NÉV

autoexpect - Expect szkriptet generál egy munkamenet megtekintéséből

SZINOPSZIS

autoexpect [ args ] [ program args... ]

BEVEZETÉS

Az autoexpect figyeli, hogyan lép kapcsolatba egy másik programmal, és létrehoz egy Expect szkriptet, amely reprodukálja az interakciókat. Az egyenes vonalú szkriptek esetében az autoexpect jelentős időt takarít meg a szkriptek kézi megírásával szemben. Még ha Ön az Expect szakértője is, kényelmesnek fogja találni az autoexpect használatát az interakciók esztelenebb részei automatizálására. Sokkal könnyebb az autoexpect szkriptek darabjait összevágni/beilleszteni, mint a semmiből írni. És ha Ön kezdő, akkor megúszhatja azt, hogy semmi többet nem tud meg az Expectről, mint az autoexpect meghívását.

Az autoexpect használatának legegyszerűbb módja, ha a parancssorból argumentumok nélkül hívja meg. Például:

autoexpect

Alapértelmezés szerint az autoexpect parancsértelmezőt hoz létre. Adott egy programnév és argumentumok, az autoexpect létrehozza azt a programot. Például:

autoexpect ftp ftp.cme.nist.gov

Miután a létrehozott program fut, a szokásos módon kommunikáljon. Ha kilépett a shellből (vagy a megadott programból), az autoexpect létrehoz egy új szkriptet. Alapértelmezés szerint az autoexpect a "script.exp" fájlba írja az új szkriptet. Ezt felülírhatja az -f kapcsolóval, amelyet egy új szkriptnév követ.

A következő példa az "ftp ftp.cme.nist.gov" fájlt futtatja, és a kapott Expect parancsfájlt a "nist" fájlban tárolja.


	autoexpect -f nist ftp ftp.cme.nist.gov

Fontos megérteni, hogy az autoexpect nem garantálja a működő szkriptet, mert szükségszerűen ki kell tippelnie bizonyos dolgokat – és esetenként rosszul tippel. Általában azonban nagyon könnyű azonosítani és kijavítani ezeket a problémákat. A tipikus problémák a következők:

1.

Időzítés. Meglepően sok program (rn, ksh, zsh, telnet stb.) és eszköz (pl. modemek) figyelmen kívül hagyja a felszólítások után "túl gyorsan" érkező billentyűleütéseket. Ha úgy találja, hogy az új szkript egy helyen lefagy, próbáljon meg egy rövid alvást közvetlenül az előző küldés előtt.

Ezt a viselkedést mindvégig kikényszerítheti, ha felülírja a "force_conservative" változót a generált szkript elején. Ez a "konzervatív" mód arra készteti az automatikus várakozást, hogy minden karakter elküldése előtt rövid időre (egy tizedmásodpercig) leálljon. Ez minden általam ismert programot megnyugtat.

Ez a konzervatív mód akkor hasznos, ha csak gyorsan meg akarja győzni magát arról, hogy a probléma az időzítésből fakad (vagy ha tényleg nem érdekli, hogy milyen gyorsan fut a szkript). Ugyanez a mód kényszeríthető a szkript létrehozása előtt a -c kapcsolóval.

Szerencsére ezek az időzítési pontok ritkák. Például a telnet csak az escape szekvencia beírása után hagyja figyelmen kívül a karaktereket. A modemek csak az első csatlakozás után hagyják figyelmen kívül a karaktereket. Néhány program mindig ezt a viselkedést mutatja, de általában van egy kapcsoló a letiltására. Például az rn -T kapcsolója letiltja ezt a viselkedést.

A következő példa elindítja az automatikus várakozást konzervatív módban.


	autoexpect -c

A -C jelző kulcsot határoz meg a konzervatív mód váltásához. A következő példa elindítja az automatikus várakozást (nem konzervatív módban) ^L kapcsolóval. (Megjegyzendő, hogy a ^L-t szó szerint kell beírni - azaz adjon meg egy valódi vezérlő-L-t).


	autoexpect -C ^L

A következő példa elindítja az automatikus várakozást konzervatív módban ^L kapcsolóval.


	autoexpect -c -C ^L
2.

Visszhangzó. Sok program visszhangozza a karaktereket. Például, ha beírja a "több" szót egy parancsértelmezőbe, az autoexpect valójában a következőket látja:


	you typed 'm',
	computer typed 'm',
	you typed 'o',
	computer typed 'o',
	you typed 'r',
	computer typed 'r',
	...

A program specifikus ismerete nélkül nem lehet tudni, hogy a következő beírása előtt várod-e az egyes karakterek visszhangját. Ha az autoexpect azt látja, hogy a karakterek visszhangoznak, akkor azt feltételezi, hogy csoportként küldheti el őket, nem pedig úgy, ahogyan eredetileg megjelentek. Ez kellemesebbé teszi a forgatókönyv olvasását. Elképzelhető azonban, hogy ez helytelen, ha valóban várnia kellene, amíg minden karakter visszhangzik.

3.

Változás. Az Autoexpect minden karaktert rögzít az interakcióból a szkriptben. Ez kívánatos, mert lehetőséget ad arra, hogy ítéletet hozzon arról, hogy mi a fontos, és mit lehet helyettesíteni a mintaegyezéssel.

Másrészt, ha olyan parancsokat használ, amelyek kimenete futásonként eltérő, akkor a generált szkriptek nem lesznek megfelelőek. Például a "dátum" parancs mindig más kimenetet ad. Tehát a dátum parancs használata az autoexpect futtatása közben egy biztos módja annak, hogy olyan szkriptet állítsunk elő, amely szerkesztést igényel a működéséhez.

A -p jelző "prompt módba" helyezi az autoexpect-et. Ebben a módban az autoexpect csak a programkimenet utolsó sorát keresi – ez általában a prompt. Ez kezeli a dátumproblémát (lásd fent) és a legtöbb mást.

A következő példa elindítja az automatikus várakozást prompt módban.


	autoexpect -p

A -P jelző kulcsot határoz meg a prompt mód átváltására. A következő példa elindítja az automatikus várakozást (nem prompt módban) ^P kapcsolóval. Ne feledje, hogy a ^P szó szerint van beírva - azaz adjon meg egy valódi vezérlő-P-t.


	autoexpect -P ^P

A következő példa elindítja az automatikus várakozást prompt módban ^P kapcsolóval.


	autoexpect -p -P ^P

EGYÉB ZÁSZLÓK

A -quiet jelző letiltja az autoexpect által generált információs üzeneteket.

A -Q jelző megnevez egy idézőjelet, amely felhasználható olyan karakterek bevitelére, amelyeket az automatikus várakozás egyébként felhasználna, mert kapcsolóként használják őket.

A következő példa számos jelzőt mutat be idézőjelekkel, amelyek a kapcsolók szó szerinti bevitelét biztosítják.


	autoexpect -P ^P -C ^L -Q ^Q

STÍLUS

Nem tudom, hogy van-e "stílus" az Expect programoknak, de az autoexpectet semmiképpen sem szabad stílusmodellként tekinteni. Az autoexpect például az Expect olyan funkcióit használja, amelyek kifejezetten számítógép által generált parancsfájlokhoz készültek. Ezért ne próbáljon hűségesen írni olyan szkripteket, amelyek úgy tűnnek, mintha az autoexpect hozta volna létre őket. Ez nem hasznos.

Másrészt az autoexpect szkriptek mutatnak néhány értékes dolgot. Például megtekintheti, hogyan kell bármely karakterláncot idézőjelbe tenni ahhoz, hogy használni lehessen egy Tcl-szkriptben, egyszerűen futtassa a karakterláncokat az autoexpecten keresztül.

LÁSD MÉG

"Exploring Expect: A Tcl-Based Toolkit for Automating Interactive Programs" by Don Libes, O'Reilly and Associates, January 1995.

SZERZŐ

Don Libes, Nemzeti Szabványügyi és Technológiai Intézet

Az expect és az autoexpect nyilvánosak. A NIST és én hálásak lennénk, ha ezeket a programokat vagy részeiket felhasználnák.