跳至內容

Expect

出自Taiwan Tongues 台語維基
這是此頁批准,以及是最近的修訂。

Expect是 Unix 系統中用來做自動化控制佮測試的軟體工具,由 Don Libes 製作,做為 Tcl 跤本語言的一个擴展,應用佇交互式軟體當中如 telnet,ftp,Passwd,fsck,rlogin,tip,ssh 等咧。該工具利用 Unix 偽終捀包裝其子進程,允准任意程序通過終端接入進行自動化控制;嘛會當利用 Tk 工具,將交互程序包裝佇咧 X 十一的圖用戶界面內底。

基本介紹

Expect 有利用正則表達式進行模式匹配佮通用的編程功能,允准簡單的跤本智能地管理如下工具:telnet , ftp 和 ssh(這家私攏欠編程的功能), 宏以及其他程序。Expect 跤本的出現予遮的老的軟體工具有新的功能佮閣較濟的靈活性。

一个簡單的跤本程序例就會當實現自動的 telnet 會話:

` ` `

  1. 假定 $ remote _ server , $ my _ user _ id , $ my _ password , 和 $ my _ command 已經抹入去。
  2. 向鋪程服鋪器舂求拍一个 telnet 鋪排,被等待服侍器抹壁堵用搶牌

spawn telnet $ remote _ server expect " username : "

  1. 抹入去抹名,抹著等待服侍器抹著的

send " $ my _ user _ id \ r " expect " password : "

  1. 抹甲密喌喌,學等待學校需要鋪排的命令

send " $ my _ password \ r " expect " % "

  1. 抹著肉先定好的密占,等待孵行鋪果

send " $ my _ command \ r " expect " % "

  1. 抹著行鋪果存入到頒量內底,抹出來抹或者是講著磁搪著

set results $ expect _ out ( buffer )

  1. 退出 telnet 鋪排,等待服侍器的退出提示 EOF

send " exit \ r " expect eof ` ` `

另外一个跤本的程序例,自動建立 FTP 會話

` ` `

  1. 向鋪程服鋪器舂求拍一个 FTP 鋪排,被等待服侍器抹壁堵用搶牌

spawn ftp $ remote _ server expect " username : "

  1. 抹入去抹名,抹著等待服侍器抹著的

send " $ my _ user _ id \ r " expect " password : "

  1. 抹甲密喌喌,抹等待 FTP 提示符仔的出擢

send " $ my _ password \ r " expect " ftp > "

  1. 切趨到二鋪模式,抹等待 FTP 提示符仔的出擢

send " bin \ r " expect " ftp > "

  1. 鋪排 ftp 的提示符仔

send " prompt \ r " expect " ftp > "

  1. 下頦所有的文件

send " mget * \ r " expect " ftp > "

  1. 退出這改 ftp 鋪排,抹著等待服侍器的退出提示 EOF

send " bye \ r " expect eof ` ` `

人講的就是

Expect 是一種將現有的實用程序組合起來的膠合劑,通常考慮的是按怎使 Expect 利用系統現有的工具解決問題毋是按怎佇 Expect 解決問題。

Expect 主要應用牽涉著商用軟體產品。足濟這類的產品攏會提供某一種的命令行家私,毋過這寡工具足欠的跤本編程的能力,只是為著幫助用戶管理產品,啊若店家通常袂佇如何實現一个穩定性好的跤本語言上了真濟精神。Expect 跤本內底會當包含講 shell,查詢環境變量,通過執行某一寡 Unix 命令得著閣較濟的信息,然後佇產品所帶命令行接口中加入必須的信息,來完成用戶的目標。佇產品命令行接口中查詢相關信息,這个跤本會當佇咧濟種選擇中智能地決定當前應該做啥較合。

逐改Expect操作完成,運行結果共保存佇咧本地環境變量 $ expect \ _ out 中。這允准跤本收集遮的信息予用戶以相應的回饋,同時凡勢根據當前的狀況發送相對應的指令。

Expect 通常用來建立一組測試套件,會當用佇咧程序嘛、組件抑是1875入式系統當中。DejaGnu 就是利用 Expect 共寫做一組測試套件。伊予大量應用佇咧測試 gcc,對佇遠逝目標的測試譬如講一千六百八十去式的開發嘛是非常適合的。

你會當利用一種叫做 " autoexpect " 的工具,自動生成 expect 劇本。這个工具觀測你的操作,並利用啟發性智識生成 expect 劇本。就算講生的代碼可能會誠長,含義上有淡薄仔霧,你會當修改生成的跤本使伊成做你需要的代碼。

觀點

Expect 會過 cron 封裝系統管理任務,佇咧規定的時期。會當按呢做是因為 Expect 干焦使用已經安裝佇主機中的系統管理工具,無需要學著另外的工具。若程式設計師學過 Tcl,遐轉移到 Expect 是一件非常簡單的工課,仝款的編程結構佮語法,閣加上一寡內置的外功能。

業界對室內管理任務使用 Expect 提供了足大的支持。Expect 佇真濟公司講法使用,比如講 Silicon Graphics , IBM , HP , Sun , Xerox , Amdahl , Tektronix , AT & T , ComputerVision 佮世界銀行,利用 Expect 嘿開發項目、文件傳輸、數號管理、網路測試進行室內家己自動測試。

Expect 已經用濟種模塊的方式共徙栽去 Python 和 Perl 語言內底。Expect 命令的部份子集徙栽到 Java 佮98入去到 SwichTermJ(是因為 Java 的終端仿真器)之中。遮的例行程序通常是原程序的同等功能的另外一種解說方式。若是你理解其中的概念,若需要的話,換著其他的語言,嘛就足容易矣。

Expect 繼承矣 Tcl 的語法規範,對使用其他的跤本語言的人來講這是相當生份的。佮其他的語言 bash、csh 和 Perl 相比並,Expect 的語法模式是無仝的。敢若有當時仔一个變量的前綴冠以 " $ ",有當時仔閣無需要。有一寡版本的 Expect 和 Perl、Python 語言的語法顛倒是足相𫝛的。

另外一个缺陷是佇無仝的平台移栽 Expect 這跤本足困難的。比如講,一个 Expect 跤本使用是因為 Unix 的工具,就無可能適合徙栽到 Windows 平台。若可能,程式設計師必須愛揣著相應的號令行程序,會當提供仝款的信息,這就可能需要修改 expect 劇本的 send 部份,這个部份恰恰就是規个跤本的核心。你若用著的是 tcl , perl 抑是講 python 遮的獨立於平台的工具,使用𪜶各人的 POSIX 接口訪問文件、著遠端交互相進行標準的 POSIX 處理(telnet , ftp 等咧), 就袂出現問題。

一个無明顯的缺陷是,有時 Expect 可能並毋是解決問題的上好方式。比如講,一个系統管理員需要登錄著偌隻侍服器,遮的自動的操作欲使用 Expect 就愛配以保存的密碼,毋是閣較安全的解決方案採用 ssh 代理密鎖。雖然這款自動交互工具真吸引人,但是猶是有足濟其他的辦法會使更加安全穩定地解決仝款的問題。

Expect 自動化控制命令行工具,但是對圖形用戶界就失效去矣。Windows 提供不少有價值的工具,真濟是以圖形用戶界面的,這就是 Expect 失效的所在矣。Windows 下圖形界面程序會當通過像 Autohotkey 抑是講 AutoIt 等工具來實現自動化控制。

參考文獻

進一步來讀冊

外部引用

  • Expect on SourceForge ( current )
  • Official homepage ( _ very outdated ! _ )
  • The Tcler's Wiki--Expect page
  • Perl Expect . pm module
  • Pexpect a Pure Python Expect-like module
  • Expect Scripting Tutorial
  • Empty-expectlike tool to run command-line interactive programs in UNIX shell-scripts
  • Expect-lite--a wrapper for expect , making automation easy , quick , and fun
  • Bulletproof : Reliable CLI interface using Expect
  • ExpectJ-a Java implementation of the Unix expect utility