Questo tip è stato aggiornato l'ultima volta il: 04/11/2004
1. Prologo
Questo topic mi ha riportato alla mente dei "problemi" nei quali mi sono imbattuto tempo fa.
Vediamo quali sono questi "problemi".
Ad esempio, mai avuto il bisogno di dover far eseguire ad uno script dei programmi, che una volta in esecuzione, avrebbero richiesto l'intervento umano, in quanto bisognosi di input da tastiera (fosse anche per un login)?
Ebbene io si.
E allora provai molte strade.
La prima fu scrivere programmi da me, passando anche per la strada "perl", che permetteva di mandare caratteri al terminale tramite la comoda funzione sendkeys.
Successivamente (per non farvela troppo lunga) mi sono imbattutto in Expect.
2. Il tip
2.1 L'installazione
Banalmente:
Code: Select all
# emerge expectCode: Select all
DEPEND=">=dev-lang/tcl-8.2
X? ( >=dev-lang/tk-8.2 )"
Un problema d'esempio potrebbe essere proprio il problema sottoposto nel suddetto topic.
2.3 Un esempio
Questo esempio si articola basandosi su un problema virtuale, analogo al problema concreto di cui al paragrafo precedente.
Di seguito lo script commentanto.
Code: Select all
#!/usr/bin/expect
# $argv contiene tutti i parametri a riga di comando
set cmd $argv
# send_human occorre per l'opzione -h (human) di send
set send_human {.1 3 1 .05 2}
# Connessione automatizzata
# lancia il client ftp per la connessione al server localhost
spawn ftp localhost
# si aspetta un prompt del tipo "login: "
expect "login: "
# invia lo username
send "nemo\n"
# etc, etc.
expect "password: "
send -h "ancoranemo\n"
expect "nemo"
# qui possiamo inviare i parametri passati dalla riga di comando
send -h "$cmd\n"
expect "nemo"
send -h "exit\n"Code: Select all
# ./mioscript.exp lsUna nota: gli script expect non supportano i commenti sulla stessa riga del codice; es:
Code: Select all
send -h "ancoranemo\n" # invia la password2.4 Approfondire
Ovviamente vi ho solo proposto un esempio per farvi capire un po' come si usasse il tutto e di cosa si trattasse.
Se volete approfondire, potete partire dal già citato sito ufficiale, usare il sempre amato man, etc.
Un consiglio è di dare uno sguardo, sul sito ufficiale, alla sezione Obtaining the examples e soprattuto a questo esempio, utile per fare questo.
2.5 Altro
- Sul sito ufficiale si trovano anche dei porting per Windows.
- Per i programmatori python, Portage suggerisce anche:
Code: Select all
* dev-python/pexpect Homepage: http://pexpect.sourceforge.net/ Description: Pexpect is a pure Python module for spawning child applications; controlling them; and responding to expected patterns in their output License: PYTHON
Spero di essere stato abbastanza chiaro.
Domani rileggo il post e vedo se ho toppato qualcosa o ho mancato delle informazioni.
Ciao a tutti.



