Expect

Un article de Wikipédia, l'encyclopédie libre.
Expect

Informations
Développé par Don Libes
Dernière version 5.45.4 ()[1],[2]Voir et modifier les données sur Wikidata
Écrit en Expect, Tcl
Système d'exploitation POSIX et Microsoft WindowsVoir et modifier les données sur Wikidata
Environnement GNU/Linux, FreeBSD, NetBSD, OpenBSD, MS Windows
Type Langage en ligne de commande (d)
Langage de programmation
Auto clicker (en)Voir et modifier les données sur Wikidata
Licence Domaine public[3]
Site web core.tcl.tk/expect/index

Expect est un outil d'automation et de tests de non-régression écrit par Don Libes comme extension au langage de script Tcl pour tester des applications interactives comme telnet, ftp, passwd, fsck, rlogin, ssh, ou bien d'autres.

Exemples[modifier | modifier le code]

Un exemple simple de script automatisant une session Telnet :

   # Assume $remote_server, $my_user_id, $my_password, and $my_command were read in earlier 
   # in the script.
   # Open a telnet session to a remote server, and wait for a username prompt.
   spawn telnet $remote_server
   expect "username:"
   # Send the username, and then wait for a password prompt.
   send "$my_user_id\r"
   expect "password:"
   # Send the password, and then wait for a shell prompt.
   send "$my_password\r"
   expect "%"
   # Send the prebuilt command, and then wait for another shell prompt.
   send "$my_command\r"
   expect "%"
   # Capture the results of the command into a variable. This can be displayed, or written to disk.
   set results $expect_out(buffer)
   # Exit the telnet session, and wait for a special end-of-file character.
   send "exit\r"
   expect eof

Un autre exemple de script testant FTP :

   # Open an ftp session to a remote server, and wait for a username prompt.
   spawn ftp $remote_server
   expect "username:"
   # Send the username, and then wait for a password prompt.
   send "$my_user_id\r"
   expect "password:"
   # Send the password, and then wait for an ftp prompt.
   send "$my_password\r"
   expect "ftp>"
   # Switch to binary mode, and then wait for an ftp prompt.
   send "bin\r"
   expect "ftp>"
   # Turn off prompting.
   send "prompt\r"
   expect "ftp>"
   # Get all the files
   send "mget *\r"
   expect "ftp>"
   # Exit the ftp session, and wait for a special end-of-file character.
   send "bye\r"
   expect eof

Et enfin ci-dessous, un exemple de test SFTP, avec mot de passe :

  #!/usr/local/bin/expect -f #<---insert here your expect program location
  
  # procedure to attempt connecting; result 0 if OK, 1 otherwise
  proc connect {passw} {
   expect {
     "Password:" { 
         send "$passw\r"
  	expect {
  	   "sftp*" {
  		return 0
  	    }  
  	}
      }
   }
   # timed out
   return 1
  }
  
  #read the input parameters
  set user [lindex $argv 0]
  set passw [lindex $argv 1]
  set host [lindex $argv 2]
  set location [lindex $argv 3]
  set file1 [lindex $argv 4]
  set file2 [lindex $argv 5]
  
  #puts "Argument data:\n";
  #puts "user: $user";
  #puts "passw: $passw";
  #puts "host: $host";
  #puts "location: $location";
  #puts "file1: $file1";
  #puts "file2: $file2";
  
  #check if all were provided
  if { $user == "" || $passw == "" || $host == "" || $location == "" || $file1 == "" || $file2 == "" }  {
    puts "Usage: <user> <passw> <host> <location> <file1 to send> <file2 to send>\n"
    exit 1
  }
  
  #sftp to specified host and send the files
  spawn sftp $user@$host
  
  set rez [connect $passw]
  if { $rez == 0 } {
    send "cd $location\r"
    set timeout -1
    send "put $file2\r"
    send "put $file1\r"
    send "ls -l\r"
    send "quit\r"
    expect eof
    exit 0
  }
  puts "\nError connecting to server: $host, user: $user and password: $passw!\n"
  exit 1

Notes et références[modifier | modifier le code]

  1. « Expect: Expect » (consulté le )
  2. « Expect - Browse /Expect/5.45.4 at SourceForge.net », (consulté le )
  3. (en) Financement américain - National Institute of Standards and Technology.

Voir aussi[modifier | modifier le code]

Articles connexes[modifier | modifier le code]

Liens externes[modifier | modifier le code]