成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

使用Expect實(shí)現(xiàn)自動(dòng)化交互

frank_fun / 2101人閱讀

摘要:于是拋出本文的主角,以實(shí)現(xiàn)一系列的自動(dòng)化交互動(dòng)作。簡(jiǎn)介是一個(gè)免費(fèi)的編程工具,用來(lái)實(shí)現(xiàn)自動(dòng)的交互式任務(wù),而無(wú)需人為干預(yù)。說(shuō)白了,就是一套用來(lái)實(shí)現(xiàn)自動(dòng)交互功能的軟件。而利用,則可以根據(jù)程序的提示,模擬標(biāo)準(zhǔn)輸入提供給程序,從而實(shí)現(xiàn)自動(dòng)化交互執(zhí)行。

*寫(xiě)在前面

最近開(kāi)發(fā)的一個(gè)項(xiàng)目希望實(shí)現(xiàn)這樣一個(gè)功能。將本地項(xiàng)目創(chuàng)建腳手架置于遠(yuǎn)程服務(wù)器,而用戶需要?jiǎng)?chuàng)建項(xiàng)目時(shí),僅需要在提供的頁(yè)面上填入一些項(xiàng)目基礎(chǔ)配置并提交,后臺(tái)便會(huì)根據(jù)選擇自動(dòng)化創(chuàng)建項(xiàng)目并push上倉(cāng)庫(kù)。
咋看是個(gè)非常簡(jiǎn)單的需求,我們僅需要在用戶發(fā)起創(chuàng)建請(qǐng)求時(shí)在后端調(diào)取shell腳本并可以實(shí)現(xiàn)這一系列的操作。
然而目前項(xiàng)目創(chuàng)建腳手架不支持多參數(shù)傳遞,只能通過(guò)用戶輸入完成各參數(shù)傳遞的操作。
于是拋出本文的主角:Expect,以實(shí)現(xiàn)一系列的自動(dòng)化交互動(dòng)作。

Expect簡(jiǎn)介
expect是一個(gè)免費(fèi)的編程工具,用來(lái)實(shí)現(xiàn)自動(dòng)的交互式任務(wù),而無(wú)需人為干預(yù)。說(shuō)白了,expect就是一套用來(lái)實(shí)現(xiàn)自動(dòng)交互功能的軟件。

在實(shí)際工作中,我們運(yùn)行命令、腳本或程序時(shí),這些命令、腳本或程序都需要從終端輸入某些繼續(xù)運(yùn)行的指令,而這些輸入都需要人為的手工進(jìn)行。而利用expect,則可以根據(jù)程序的提示,模擬標(biāo)準(zhǔn)輸入提供給程序,從而實(shí)現(xiàn)自動(dòng)化交互執(zhí)行。這就是expect?。?!

Expect命令

使用expect時(shí),首先需要在文件頂部寫(xiě)入#!/usr/bin/expect,已告知進(jìn)程這是一個(gè)expect文件。而在腳本書(shū)寫(xiě)中基本離不開(kāi)以下這「六」個(gè)命令。

spawn 啟動(dòng)新的進(jìn)程

expect 用來(lái)等待一個(gè)進(jìn)程的反饋,我們根據(jù)進(jìn)程的反饋,再發(fā)送對(duì)應(yīng)的交互命

send 發(fā)送需要交互的值,替代了用戶手動(dòng)輸入內(nèi)容

set 設(shè)置變量值

expect eof 自動(dòng)化結(jié)束

interact 退出自動(dòng)化,進(jìn)入人工交互

Expect語(yǔ)法

expect使用的是tcl語(yǔ)法,詳細(xì)教程可查閱TCL基本語(yǔ)法 - Tcl教程
這里提供幾個(gè)簡(jiǎn)單的流程控制,一般來(lái)說(shuō)已經(jīng)夠用了。

傳參

expect參數(shù)值存放在$argv中,比如取第一個(gè)參數(shù)就是[lindex $argv 0],以此類推。

// 執(zhí)行命令 xxx.sh mike 22 engineer

#!/usr/bin/expect
set name = [lindex $argv 0]
set age = [lindex $argv 1]
set job = [lindex $argv 2]
if/else
if {$a == "a"} {
  set flag = 0
} else {
  set flag = 1
}

expect "*請(qǐng)輸入xxx的值*"
send $flag
循環(huán)匹配

一般來(lái)說(shuō)expect匹配成功會(huì)會(huì)退出語(yǔ)句,而exp_continue表示循環(huán)匹配。匹配到改關(guān)鍵字后繼續(xù)從頭開(kāi)始匹配。例如安裝軟件時(shí)需要輸入多個(gè) yes。

expect {
    "*yes/no*" {
        send "yes"
        exp_continue
    }
    eof
    {
        send "eof"
    }
}
栗子

未完待續(xù)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/109254.html

相關(guān)文章

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<