日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

proc编译手册_Expect 手册 中文版

發布時間:2023/12/3 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 proc编译手册_Expect 手册 中文版 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Expect 手冊 中文版

本文由gunman翻譯,在此感謝~

EXPECT(1)

名字:

Expect-----能與交互式程序進行“可程序化”會話的腳本語言

大綱:

(命令選項概述)

expect [ -dDinN ] [ -c cmds ] [ -[f|b] ] cmdfile ] [ args ]

概述:

Expect是一種能夠按照腳本內容里面設定的方式與交互式程序進行“會話”的程序。根據腳本內容,Expect可以知道程序會提示或反饋什么內容以及

什么是正確的應答。它是一種可以提供“分支和嵌套結構”來引導程序流程的解釋型腳本語言。另外,還可以在隨時需要的時候把控制權交給用戶,然后再還給腳

本。

ExpectK是Expect和Tk的混合體。它就按照Expect和Tk的方式運行。Expect也可以直接嵌入到C或是C++程序中(這種情況是不涉及Tcl解釋)。請看libexpect(3).

Expect的名字是從被UUCP(UNIX到UNIX的拷貝),Kermit(一種文件傳輸協議,

由哥倫比亞大學設計)和一些其他Modem控制等程序設計思維大眾化的“send/expect”時序理念中得出的。不像UUCP,Expect已經被廣

泛應用于很多你可以想像的到的程序和任務當中了。

Expect還能同時和多個程序交互。

例如:下面是一些Expect可以做到的事情

1)讓你的計算機呼叫你,這樣你可以不用付呼叫費。

2)啟動一個游戲(例如:rogue),如果不是最佳配置,則一直重新啟動,直到是最佳配置為止。然后把控制權轉交給你。

3)運行fsck的時候,用”yes”或是”no”來回應fsck的交互問題。在沒有預設答案標準的情況下把控制權返還給你。

4)連接到另一個網絡或是BBS站點,自動收取你的郵件,就像郵件是發往你的當地系統一樣。

5)在執行rlogin,telnet,tip,su,chgrp等等命令的時候保存“環境變量”,“當前目錄”或是其他一些信息。

有很多原因致使Shell不能完成這樣的任務(你自己可以試試看)。而這一切對于Expect

來說都是可以的。一般情況下,當一個程序需要程序與用戶進行交互的時候就需要用到Expect。還需要的一個前提是這種交互必須能程序化(例如:循環結

構,選擇結構等等,個人認為必須是有規律可循的)。如果需要的話,Expect還能把控制權返還給用戶。同樣,用戶也可以在任何時候把控制權還給腳本程

序。

用法:

Expect通過讀取cmdfile(命令文件)來執行一系列指令。只要系統支持“#!“,在Script腳本文件的首行標明“#!/usr

/local/bin/expect –f“,并賦予腳本文件可執行權限,執行腳本文件就可以(隱含方式或是默認)調用Expect。

當然,上面的路徑必須正確地指明Expect解釋程序的位置。/usr/local/bin只是一個例子。

-c 選項用來標明需要在執行腳本內容之前來執行的命令。

這條命令(-c選項后的命令)應該用引號括起來,以免在執行時被shell分開解釋。

-c選項可能會被反復使用。多條命令可以使用同一個”-c”,命令之間需要用分號隔開。這些命令會按照它們出現的先后順序執行。(在Expectk中,”-c”相當于”-command”)。

-d 選項允許輸出調試性信息。這些信息主要報告像expect和interact等命令執行時的內部行為。這個選項與寫在腳本開頭的

”exp_internal

1”具有同樣的效果,同時還會打印出Expect的版本。(strace命令用在跟蹤變量聲明,trace命令用于跟蹤變量的賦值)(在Expectk

中,”-d”相當于”-diag”)

-

D選項開啟交互調試器。后面必須跟有一個整數值作為參數,當值為非零或是按下CTRL+C的時候(或是遇到斷點,或是在腳本中恰好出現其他的調試語句),

調試器會在進行下一次Tcl Procedure前取得控制權。想了解更多信息請參見README文件或是下面的SEE

ALSO。(在Expectk中,這個選項相當于”-Debug”)。

- f 選項指明從哪個文件中讀取命令。這個選項是可選的,因為只有當使用”#!”時它才有可能被用到。而其他選項可以寫在命令行中。(在Expectk中,它相當于”-file”)。

默認情況下,命令文件是全部讀入內存一并執行的。但有些時候需要每次只讀一行。例如:stdin(標準輸入)就是這樣讀取的。如果強制任意文件以這種方式(每次讀一行)執行的話就使用”-b”選項。(在Expectk中,它相當于”-buffer”)。

如果”-“被一個文件名替代,那么腳本就會用讀指定文件的方式來替代從標準輸入讀的方式。(例如:”./ -“就表示從一個名為”-”的文件中讀所需的信息)。

-i

選項使Expect能交互式的提示輸入命令,而不是從文件中讀取。在遇到文件尾或是執行了exit命令時,提示輸入命令終止。要了解更多信息請參見下面的

interpreter。-i

選項是假設既不是從一個命令文件讀,也沒有使用-c選項。(在Expectk中,它相當于”-interactive”)。

-- 是用來為劃定選項尾的。當你需要像使用選項一樣傳一個參數,但希望這個參數不要被當作選項解釋時,就需要用到這個選項。當阻止其他選項時,可以把它放在”#!”行中。例如:下面的例子會讓所有參數(包括腳本文件名)都存儲在argv中。

#!/usr/local/bin/expect –

注意:當在”#!”行中使用參數時,必須遵守getopt(3)和execve(2)的規定。

$exp_library下如果有expect.rc這個文件的話,它會自動被加載為資源文件(應該是類似于標準配置文件,像用戶根目錄下

的.bash_profile文件一樣)。除非使用-N選項取消自動加載。(在Expectk中,它相當于”-NORC”)。這個文件被加載后,緊接著用

戶根目錄下的.expect.rc(~/.expect.rc)會被加載。除使用-n選項取消。如果定義了環境變量DOTDIR,那么它被認為是存放

有.expect.rc文件的目錄。然后從這個目錄中讀取.expect.rc文件。(在Expectk中,它相當于”-norc”)。這些加載配置文件

的動作是出現在執行完-c選項指定的命令之后。

-v 選項用來打印出版本號,然后退出。(在Expectk中的相應選項是-version)。

可選的參數匯成一列,存放在變量argv中。Argc被初始化為argv的長度(變量個數)。Argv0被設置為腳本名稱(or binary if no script is used)。例如:下面的例子打印出腳本的名稱和前三個參數。

Send_user “$argv0 [lrang $argv 0 2 ]\n”

命令:

Expect使用Tcl語言(Tool Command Language).Tcl提供諸如流控制,表達式值和一些其他的特性。像遞歸調用,定義函數等等。在這里用到的沒有說明的命令都是Tcl命令。

Expect支持一些額外的命令。下面具體描述。除非另外聲明,否則命令返回空字符串。命令按字母順序排序,這樣便于查找。僅管如此,初學者還是覺得按照”spawn , send , expect , interact”這種方式來讀比較容易。

注意,Exploring Expect這本書中提供了關于”Expect和Tcl”的介紹.這本Manpage手冊中也提供了一些例子.但數量有限,因為這本是做為入門的教材手冊使用的.

在本手冊中,以E開頭的是指Expect程序,小寫e開頭的是指expect命令.

close [-slave] [-onexec 0|1] [-i spawn_id]

關閉與當前進程的連接.大多數交互程序會在它們的stdin(標準輸入)中檢測到EOF(文件尾),然后退出.所以通常close也有能力殺死進

程.-i選項指定了要殺死的對應于spawn_id的進程.expect和interact都能檢測到當前程序的退出,并隱含的執行一個關閉.如果你通過

執行”exec kill $pid”來殺死進程的話,那么你就需要再顯式的調用一下close.

-onexec選項用來確定spawn_id在開始新的spawned

process(我將其翻譯為監測進程)時是被關閉還是要被覆蓋.如果想保持這個spawn_id打開的話,那么后面的參數需要設為0.一個非零值將會使

spawn_id關閉,并可以將這個spawn_id用于新的進程(默認行為).-slave選項是用來關閉從屬進程.(參見spawn

-pty)。如果在連接中止的時候,從屬進程還打開的話,那么它將自動關閉。不管進程是顯式的調用或是隱式的被中止,你都需要調用wait命令來清理進程

執行的殘余。Close不會調用wait。因為在關閉進程的時候,并不能保障它“正常退出”(個人認為,可能是指退出時做相應的清理工作)。要了解更多的

信息,請參見wait命令。

debug [[-now] 0|1]

控制Tcl調試器以步進方式執行語句,設置斷點等等。在沒有參數的情況下,如果調試器沒有運行,返回1,否則返回0。用1做參數時,啟動調試器,用0做

參數時,停止調試器。如果連同-now一起使用的話,調試器將立即啟動(也就是說,在debug命令當中)。否則調試器會在執行下一條語句的時候啟動。

調試命令不會改變任何的traps。可以參見以-D選項啟動Expect(參見上面)

要了解更多關于debugger的內容,請參見README文件和下面的SEE ALSO。

disconnect

從終端關閉與一個克隆進程的連接,但讓它在后臺繼續運行。這個進程將被賦予為單獨的進程組(如果可能的話)。標準I/O被重定向到/dev/null。下面的代碼使用disconnect命令使腳本在后臺繼續運行。

if [fork]!=0 exit

disconnect

下面的腳本需要讀取一個密碼,然后每小時執行一次,每次執行的時候都要求輸入密碼。腳本提供了所需的密碼,所以你只需輸入一次就可以了。(參見能關閉回顯的終端命令)。

send_user "password?\ "

expect_user -re "(.*)\n"

for {} 1 {} {

if [fork]!=0 {sleep 3600;continue}

disconnect

spawn priv_prog

expect Password:

send "$expect_out(1,string)\r"

. . .

exit

}

用這種方式,而不是用Shell后臺方式來執行程序的好處是,用disconnect可以在關閉前保存終端參數,然后把它們應用于新的終端中。如果使用&的話,Expect沒有機會讀取終端參數,因為在Expect取得控制權的時候,終端已經退出了。

exit [-opts] [status]

使Expect退出或是準備退出。-onexit選項使下一個參數做為退出的句柄被使用。沒有參數時,返回當前的退出句柄。-noexit選項使

Expect準備退出,而不是把控制權暫時返還給系統。用戶定義的退出句柄和Expect內部的句柄都是以同樣的方式被返回。接下來將不再執行

Expect命令。這在Tcl擴展環境下執行Expect時非常有用。保留當前的解釋器(在Tk環境中的主窗口)以清除其他的Tcl擴展。如果

Expect再次調用exit(這有可能發生),不會返回句柄。退出時,全部連接將關閉,關閉的動作會被監測的進程檢測為“到文件尾”。exit只按照正

常exit(2)的中的語句來執行,不會引發其他的動作。因此監視的進程如果沒有檢測到“到文件尾”的話,會繼續執行。(能檢測更多的情況是很重要的。例

如:什么樣的信號會發給監測進程,但這些是由系統決定的,它們放在exit(3)的文檔中)。如果被監測的進程繼續運行的話,將會被init繼承。當前的

狀態信息將做為Expect的退出信息返回(如果沒有指明的話,返回信息為0)。退出命令在腳本程序執行的最后才自動隱含的調用。

Exp_continue [-continue_timer]

這個命令可以使expect繼續執行而不是正常的返回.默認情況下,exp_continue會重高超時時鐘,-continue_timer選項會阻止時鐘重新計數(連續計數).

Exp_internal [-f file] value

如果是value非零的話,使接下來的命令將調試信息輸出到Expect和標準錯誤輸出.如果是0的話,輸出的信息將會被屏蔽.調試信息包括收到的每條

信息和每次嘗試用當前輸出與腳本中的模式相匹配的信息.如果設置了輸出文件,那么正常的和調試的信息都會被寫到這個文件當中.(忽略上面value選項的

值).任何之前打開的調試輸出文件將會被關閉.-info選項使exp_internal返回最近關于non-info參數的描述.

Exp_open [args] [-I spawn_id]

它返回對應于原始spawn

id的文件描述符.這樣這個文件描述符就可以被使用了,就好像這個文件是被Tcl的open指令打開的一樣.(這個spawn

id將不再使用,wait指令將不能用在這個進程.).-leaveopen選項使spawn id保持打開,以便供Expect命令使用.

Exp_pid [-i spawn_id]

它將返回對應于當前被跟蹤進程的ID.如果使用-i選項,將返回對應于指定的spawn id的進程ID.

Exp_send

它是send的別稱

Exp_send_error

它是Send_error的別稱

Exp_send_log

它是Send_log的別稱

Exp_send_tty

它是Send_tty的別稱

Exp_send_user

它是Send_user的別稱

Exp_version [[-exit] version]

它用于確保腳本程序與當前的Expect兼容。在沒有參數的情況下,返回當前Expect的版本.這個版本就會編譯到腳本中.如果你確切的知道你的腳本程

序不需要最新版本的特性,可以指定一個以前的版本。

版本號由三個由句點分隔的數字組成.第一個是主序號.對應某一主序號版本的Expect寫的腳本程序,在不同主序號版本的Expect環境下基本不能正

常運行.exp_version在主版本不同的情況下會返回一個錯誤.第二個數字是次版本號.編寫腳本的Expect的次版本號如果比當前的Expect

大的話,可能會用到一些新的特性,在當前的環境下可能不能正常運行.exp_version會在當主序號相同,但次序號比當前Expect版本大的時候返

回一個錯誤信息.第三個數字在Expect的版本比較中沒有多大作用.它只是當發行版有任何變化的時候會增加.比如說增加一些新的文檔或是做了優化.當升

級到一個新的次版本號時,這個數字會被初始化為零.如果使用了-exit選項,Expect會在當前的版本過期的時候打印一個錯誤信息,然后退出.

expect [[-opts] pat1 body1] ... [-opts] patn [bodyn]

等待直到被監視進程的輸出與設定的模式相匹配,或是一個指定的時間過后,或是遇到文件尾.如果最后的body是空的,那么它將被忽略.最近的

expect_before設定的模式會在其他模式之前被隱含地使用.最近的expect_after設定的模式將在所有其他模式匹配完后才被調用.如果

整個Expect命令的參數超過一行,這個參數可能被分為多行,各行之間用一個”\”連接,以防被分開解釋.在這種情況下,Tcl解釋器通常會置換掉”

\”.如果一個模式設定為eof.則相應的語句被在當達到文件尾的時候執行.如果一個模式設定為timeout,那么相應的語句會在超時時執行.如果沒有

設定timeout對應的執行語句,將會在timeout時隱含執行空指令.即不執行任何語句.默認的超時時鐘設的是10秒,但可以自己設定.通過

”set timeout

30”,可以將超時時鐘設定為30秒.如果設定為-1的話,那么超時時鐘將是無窮大,如果一個模式設定為default,那么相應的語句將會在遇到文件尾

或是超時時執行.如果觸發了相應的模式,則此模式對應的語句將會被執行.Expect返回語句執行的結果(或是在沒有模式觸發的情況下是空字符串).在多

種模式匹配的情況下,第一個匹配的模式對應的語句將被執行.

每次出現新的輸出的時候,它們都會依次匹配相應的模式.因此,如果你想測試匹配是否成功,可以把最后一個模式設定為肯定會出現的東西,例如一個提示符.

在沒有提示符的情況下,你需要使用一個timeout模式。模式被定義為三種類型.默認情況下,模式被定義為Tcl的string

match(字符串匹配)指令.(這些模式很像C

Shell中的正則表達式,它們通常被用來做模糊匹配).-gl選項保護那些可能被認為是Expect的選項的模式匹配字符串。以”-”開頭的所有模式匹

配字符串都需要這樣保護起來。(因為默認情況下,以”-”開頭的字符串都被保留起來做為將來的選項)。例如:下面的代碼期望一個正確的登錄.(注意下面的

abort是一個已經在腳本的其他位置定義好的函數)

expect {

busy? ?? ?? ?? ?? ?{puts busy\n ; exp_continue}

failed? ?? ?? ?? ? abort

"invalid password" abort

timeout? ?? ?? ?? ?abort

connected

}

在第四行需要使用引號,因為它包含了一個空格.如果不用引號把模式括起來的話,它會被分別解釋為模式與執行函數.執行同樣動作的其他模式同樣需要把執行

函數的名稱寫出來(像其他兩個執行”abort”函數的模式),如果使用regexp-style模式的話(看下面的例子),更多關于建立glob-

style模式的信息請參見Tcl手冊.regexp模式以-re開頭.上面的例子可以用regexp模式改寫成下面的代碼:

expect {

busy? ?? ? {puts busy\n ; exp_continue}

-re "failed|invalid password" abort

timeout? ? abort

connected

}

兩種類型都可以被正確匹配。這就是說設置的類型可以不用是整個字符串。可以只匹配頭部或是尾部(就假設其他部分也匹配一樣)。用^來匹配字符串頭部。

用$來匹配字符串尾部。如果你不希望等待直到字符尾,你可以在監視進程回顯字符的中間時刻結束響應。雖然仍能打印出正確的結果,但最后的輸出可能看上去有

點混亂。因此如果能夠詳細描述預期的字符串尾部的話,還是鼓勵使用$來匹配尾部。在許多編輯器中,^和&分別表示首行和尾行。因為Expect不

是基于行緩沖的程序。所以這兩個字符分別用來表示當前匹配緩沖區中的頭數據和尾數據。-ex使模式進行精確匹配。這時,不對*,^等字符進行解釋(但還是

要遵守Tcl的規則)。Expect patterns are always unanchored.

-nocase選項使輸出中的大寫字符也按小寫字符匹配。模式匹配字符串本身改變。在讀取輸出進行匹配時,超過2000字符將會強制將前面的字符丟棄。

這個數目可以通過match_max來改變。(但太大的數目會降低匹配的效率)。如果patlist是full_buffer,則在收到

match_max個字節而沒有相應的模式匹配成功時,執行full_buffer所對應的語句。不管是否使用了關鍵字full_buffer,丟棄的字

符都會被寫到expect_out緩沖區中。如果patlist是關鍵字null。并且空是有效字符(通過remove_nulls指令訪問),如果輸出

是一個單個的ASCII碼0,那么null相對應的語句將被執行。通過glob或是regexp模式是不能來匹配0字符。

在匹配字符串時(或是遇到文件尾,或是緩沖區滿full_buffer),任何匹配的或是前面沒有匹配的輸出都會被保存在expect_out緩沖區中。

匹配到的9個字符分別被放到expect_out(1,string)至expect_out(9,string)中。如果在模式前使用了

-indices選項,那么,這10個字符的開始字符和結尾字符在字符串中的位置被分別存放在變量expect_out(X,start)和

expect_out(X,end)中。其中X是自然數(應該是0到9)。0(expect_out(0,*))是指整個匹配的字符串,它可以用于

glob模式,也可以用于regexp模式。例如:如果一個進程的輸出為“abcdefgh\n”,那么expect

“cd”的執行結果和下面的代碼執行結果是一樣的。

Set? ? expect_out(0,string) cd

Set? ? expect_out(buffer) abcd

“efgh\n”被丟棄到輸出緩沖區了。如果一個進程的輸出是”abbbcabkkkka\n”,那么expect –indices –re “b(b*).*(k+)”的執行結果和下面語句的執行結果是相同的。

set expect_out(0,start) 1

set expect_out(0,end) 10

set expect_out(0,string) bbbcabkkkk

set expect_out(1,start) 2

set expect_out(1,end) 3

set expect_out(1,string) bb

set expect_out(2,start) 10

set expect_out(2,end) 10

set expect_out(2,string) k

set expect_out(buffer) abbbcabkkkk

“a\n”被丟棄了輸出緩沖區中了。含有”*”(和-re

“.*”)的模糊匹配的模式會清空輸出緩沖區,不再讀取從進程中輸出的字符。一般情況下,匹配的輸出會被Expect的內部緩沖區丟棄.可以通過在模式前

加上-notransfer選項來避免被丟棄.這個選項在實驗時非常有用(為了方便,可以簡寫成-not).與匹配輸出相對應的spawn

id被存儲在expect_out(spawn_id)中.

-timeout 選項使得Expect使用選項后面的數值做為超時時間,而不是timeout變量中設置的時間.

默認情況下,設定的模式只與當前進程的輸出進行匹配.-i選項使得指定spawn_id或是spawn_id列的輸出與下面列出的所有模式進行匹配(直

到下一個-i選項為止).spawn_id列要么是用空格分隔的一列spawn_id,要么是用變量存儲的這要一列spawn_id.例如,下面的例子

中,當前進程與”connected”進行匹配,由變量$proc2指定進程與”busy”,”failed”,”invalid

passowrd”進行匹配。

expect {

-i $proc2 busy {puts busy\n ; exp_continue}

-re "failed|invalid password" abort

timeout abort

connected

}

全局變量any_spawn_id的值是在當前expect中所有-i選項定義的spawn_id進程列的總和.它用來使這些spawn_id進程列與

模式進行匹配。在一些-i選項中可能只給出了spawn_id列,但沒有給出相應匹配模式.(例如,-i選項緊接下來就是另一個-i選項).那么這些

spawn_id列將會去匹配與any_spawn_id相對應的模式.

-i選項還可以定義一個全局變量,里面存儲著spawn_id列.當變量內容發生變化時,它會被重新讀取.這樣就可以在程序執行的時候改變I/O源.以這種方式提供的spawn_id被稱為”indirect spawn_id”.

Break和continue使流程(例如:for結構,proc函數)按照正常的順序執行.exp_continue使expect繼續執行而不是像

通常一樣返回.這對于避免explicit

loops(不執行以后有語句,直接進入下一次循環)和重復的語句很有用.下面的例子是一個自動rlogin的代碼片斷.exp_continue的使用

避免了在rlogin揭示輸入密碼的時候的再寫一個重復的expect語句.(需要等待第二次提示)

expect {

Password: {

stty -echo

send_user "password (for $user) on $host: "

expect_user -re "(.*)\n"

send_user "\n"

send "$expect_out(1,string)\r"

stty echo

exp_continue

} incorrect {

send_user "invalid password or account\n"

exit

} timeout {

send_user "connection to $host timed out\n"

exit

} eof {

send_user \

"connection to host failed: $expect_out(buffer)"

exit

} -re $prompt

}

例如,下面的代碼使用戶可以在任務完全自動化的情況下,還能引導人機交互.這種情況下,終端被設置成原始狀態.如果按下”+”,那么一個變量的值增加,

如果按下”P”,那么向進程發送幾個回車符,或是以其它的方式回應一下.如果按下”i”,那么用戶就會從腳本那兒把控制權收回,來與進程進行交互.在每個

情況下,exp_continue都使在執行完當前的動作之后,繼續執行模式匹配.

stty raw -echo

expect_after {

-i $user_spawn_id

"p" {send "\r\r\r"; exp_continue}

"+" {incr foo; exp_continue}

"i" {interact; exp_continue}

"quit" exit

}

默認情況下,exp_continue會重置超時時間.如果以帶有-continue_timer選項的方式執行exp_continue的話,超時時鐘不會重新啟動.

Expect_after[expect_args]

它和expect_before的工作方式相同.在expect和expect_after能同時匹配的情況下.進程與expect命令下面的模式進行匹配.想了解更多的信息請參見expect_before.

Expect_background [expect_args]

它和expect有一樣的參數列表.但不同的是它是立即返回.一旦有新的輸入到達時就開始進行模式匹配,timeout和default兩個模式對于

expect_background來說沒有意義,它們會被隱含忽略.否則,expect_background會像expect一樣調用

expect_before和expect_after的模式匹配.

當expect_background在執行模式匹配時,對應于這個spawn_id的后臺進程將被阻塞.當執行完成時,后臺進程被解開.在后臺進程被

阻塞期間,還可以在前臺以同樣的spawn_id執行一個expect腳本.但在非阻塞情況下是不可能這樣做的.在用同一個spawn_id聲明一個新的

expect_background時,前一個就會被自動刪除.聲明一個沒有匹配模式的expect_background將會使相應的spawn_id

失去在后臺匹配模式的能力.

Expect_before [expect_args]

它和expect具有相同的參數列表.但不同的是它立即返回.相同spawn_id最近的expect_before下的匹配模式會自動隱含的加載到下

面的expect命令中.如果其中一個模式匹配成功了,就好像匹配的模式是列在expect命令本身下面一樣.如果expect_before和

expect的模式同時匹配,那么將使用expect_before.如果沒有相應的匹配列出來,那么這個spawn_id將不進行任何模式匹配的動作.

除非使用-i選項強制聲明,否則expect_before的模式將與執行expect_before命令時對應的spawn_id的進程輸出進行匹配

(而不是有模式匹配成功時的spawn_id).-info選項會返回當前模式的詳細信息.默認情況,它會報告當前的spawn_id的信息。也可以通過

指定spawn_id來顯示指定spawn_id的信息.

例如:? ? expect_before –info –I $proc

這樣最多返回一個spawn_id的詳細信息. The flag -indirect suppresses direct spawn ids that come only from indirect specifications.

-all選項使expect_before報告所有spawn_id的信息,而不是單個spawn_id的信息。

expect_tty [expect_args ]

和expect的用法很像,但它是從/dev/tty讀取字符串(例如:用戶的擊鍵)。默認情況下,讀是工作在精加工緩沖模式下的。因此,每行之后必須

以回車結尾,這樣expect才能分別識別它們。讀模式(例如行緩沖,等等)可以通過stty命令更改(參見下面的stty命令)

expect_user [expect_args]

和expect的用法很像,但它是從stdin(標準輸入)讀取字符串(例如:用戶的擊鍵)。默認情況下,讀是工作在精加工模式下的。因此,每行之后必

須以回車結尾,這樣expect才能分別識別它們。讀模式(例如行緩沖,等等)可以通過stty命令更改(參見下面的stty命令)。

Fork

創建一個新進程。這個新進程是當前進程的完整拷貝。成功時,會返回0給新進程,返回新進程的ID給當前進程。失敗時(失敗的原因可能是資源匱乏,如交換

分區,內存不足等),返回一個-1給當前進程,沒有新進程創建。復制的新進程和它的父進程一樣通過exit命令退出。復制的新進程允許寫日志文件。如果不

屏蔽大多程序的debugging(調試)和logging(寫日志)功能,結果(個人認為:輸出結果或是日志)看起來會顯得有點混亂。在多個用戶的情況

下,即使是很短暫的pty執行結果,看起來也會很讓人混亂迷惑。因此,在監視某個進程(個人認為是執行spawn)之前執行fork更好一點。

interact [string1 body1] ... [stringn [bodyn]]

返回當前進程的控制權給用戶。所以擊鍵會被傳給當前進程(就像平時操作一樣)。當前進程的stdout和stderr也會返回(個人認為:可能在腳本執

行時,標準輸出和標準錯誤輸出是被重定向到Expect的,因為執行spawn之后,expect會等待進程的輸出,包括錯誤輸出)。String-

body被指定為參數。在這種情況下,當有指定的string輸入時,對應的body就會被執行(默認情況,string不會被傳給當前進程)。如果沒有

最后的body部分,那么將執行interact命令。如果整個interact語句參數過長,超過一行,這些參數會用反斜線連接,分隔在多行,這樣避免

了語句在執行時被隔斷。這種情況下,在Tcl進行語法解釋的時候會忽略這些反斜線,把這多行做為一條語句來執行。例如,下面的代碼舉例說明了以

string-body方式執行interact命令。String-body是這樣設定的:當你按下Ctrl+Z時,Expect

將掛起,按下Ctrl+A時,用戶將會看到屏幕顯示“you typed a control

A”,并且也向當前進程發送一個Ctrl+A。當用戶按下$時,用戶會看到屏幕上顯示系統日期。按下Ctrl+C

時Expect將退出。如果輸入”foo” ,用戶將在屏幕上看到“bar”,如果輸入~~,那么Expect解釋器交互執行。

set CTRLZ \032

interact {

-reset $CTRLZ {exec kill -STOP [pid]}

\001? ?{send_user "you typed a control-A\n";

send "\001"

}

$? ?? ?{send_user "The date is [exec date]."}

\003? ?exit

foo? ? {send_user "bar"}

~~

}

在string-body中,字符是按string在string-body中出現的順序匹配的。

在不清楚余下的字符是什么的情況下,只是部分匹配的字符是不會被發送到當前進程的。如果在獲得了余下的字符之后,整個字符串沒有相應的string-

body可以匹配(也就是說整個字符串在string-body中,沒有對應相同的string),除了上面說的匹配字符外,也沒有其他更多的匹配(個人

理解:比如整個字符xxxbbccada.第一次提到的匹配字符xxxbb,string-body中有兩個對應的

string:string1=xxxbb,string2=xxxbbcc,那么也就是說整個字符是沒有相應的string與之匹配,如果只有

string1,沒有string2,那也就是“沒有更多的匹配”,只有xxxbb會發送到當前進程,如果存在string2,那么我們最好把

string2放在string1前面,這樣可以先在匹配string2,如果輸出字符串中,沒有相應的xxxbbcc,然后再去匹配string1。也

就是說把“最大匹配”放在前面),那么只有匹配的字符會發給當前進程。因此,我們可以把“部分匹配”放在后面,如果整個字符(或是“最大字符”)匹配失

敗,我們再進行“部分匹配”。默認情況下,string匹配必須是精確完全匹配。(與之相反,expect命令默認使用glob-style模式)。

-ex選項保證那些可能被解釋成interact選項的string能被正確執行。任何以”-”開頭的string都需要使用-ex。(所有以”-”開頭

的字符將被做為選項)

-re選項強制string按regexp模式解釋。這種情況下,像expect會把它的輸出存儲在變量expect_out里面一

樣,interact匹配的字符串也會在存儲在變量interact_out中。-indices選項的作用也和expect中的一樣。Eof模式列出了

在遇到文件尾的時候要執行的語句。一個單獨的eof模式可能跟在-output選項后面,這樣當寫輸出遇到文件尾的時候,就會觸發eof模式,執行相應的

語句。默認的eof行為是返回,所以執行interact命令時,在遇到文件尾就是返回。Timeout模式介紹了超時(以秒為單位)的概念,并列出了

(超時)連續數秒沒有讀取到字符后的執行語句。Timeout作用于最近指定的進程。**這里沒有默認的timeout,特殊變量

timeout(expect命令里面使用的)對這里的timeout模式沒有影響。**例如,下面的命令可以用于自動退出用戶,他們在一小時之內沒有輸

入任何字符,卻一直收到系統消息。

interact -input $user_spawn_id timeout 3600 return –output??$spawn_id

如果模式為關鍵詞null,而且null是允許的(通過remove_null命令),則在輸出中如果出現單個的ASCII

0,那么null對應的語句將被執行。在glob和regexp模式下是不可能完成的。在模式前加上-iwrite選項,將會把匹配成功(或是遇到文件

尾)的進程的spawn_id賦值給變量interact_out(spawn_id)。Break和continue會使控制結構(for循環,子函數

等等)按照正常的方式運行,但return會使interact把信息返回給它的調用函數。Inter_return會使它的調用函數返回。例如,如果一

個子函數foo調用了inter_return,在執行inter_return時,子函數foo會返回。(這就是說,當interact交互式調用解釋

器時,如果輸入return,那么交互還將繼續,如果輸入inter_return,那么interact將返回)

在interact執行過程中,終端工作在“原始狀態”下,這樣所有字符都將發送給當前進程。如果當前進程沒有捕獲到工作流程的信號,那么按下

Ctrl+Z會使其中止。如果想重啟這個進程,可以給它發送一個“繼續”信號(如執行:"kill??-CONT

"),如果你真想給當前進程發送一個“中止”信號,你可以考慮先監視csh,然后再啟動你的程序。也就是說,如果你想發送中止信號

給Expect,首先要調出解釋器(可能是按一下ESC鍵),然后按下Ctrl+Z。

為了避免進入解釋器,交互式的執行命令,string-body可以用做“速記”,當string-body對應的body執行的時候,使用的前一個終

端模式。為了程序的執行效率,默認情況下,終端使用原始狀態。-reset使終端恢復到interact執行以前的狀態(總是“精加工”狀態)。注意的

是,在進行終端模式轉換的時候,此時輸入的字符可能丟失(在一些系統上,會出現這種

糟糕的現象)。最好在你必須使用”精加工”模式再使用-reset選項。-echo選項使與模式進行匹配的字符同時也被發送給產生這些字符串的當前進程,就好像是當前進程讀取到他們一樣。這在當用戶希望在執行某些指令需要看到回顯的時候非常有用。

如果回顯了一個模式,但最終沒有匹配成功,這些字符會被發送到監視的進程,如果監視的進程再把它們顯示出來的話,那么用戶將會看到他們兩次。-echo

可能僅僅適合于當用戶不可能不完成模式匹配的情況。例如:下面是摘自于rftp,一個遞歸式ftp腳本,用戶被提示輸入”~g,~p,~l”,以便遞歸的

”獲得,上傳,查看”當前路徑。這些字符和常規的ftp命令相差太遠,用戶除非出錯,否則基本上不會打出”~”后面跟有某些字符的情況。這種情況下,他們

就可能會忽略了正確的結果。

interact {

-echo ~g {getcurdirectory 1}

-echo ~l {getcurdirectory 0}

-echo ~p {putcurdirectory}

}

-nobuffer選項會把進行模式匹配的字符發送給輸出進程,就像這些字符是被讀取的一樣。這在你想讓進程回顯模式的時候非常有用。例如,下面的代碼監視了哪個用戶在撥叫(一種Hayes模式的Modem),每次都會在腳本的日志文件中后面看到一個”atd”。

proc lognumber {} {

interact -nobuffer -re "(.*)\r" return

puts $log "[exec date]: dialed $interact_out(1,string)"

}

interact -nobuffer "atd" lognumber

在交互過程中,log_user的前一個值被忽略了。特別需要說明的是,interact會強制使他的輸出記錄成日志(輸出到標準輸出),因為它認為用

戶不希望沒有任何回應的交互。-o選項使下面的key-body模式應用于當前進程的輸出(也就是說用當前進程的輸出來匹配模式)。這對于處理像”在一個

telnet會話中輸入很多錯誤字符(個人認為:非命令或是選項字符)”的情況非常有用。

默認情況下,interact希望用戶對標準輸入進行寫操作,對標準輸出進行讀操作。-u選項通過指定進程名(通常是指定一個spawn_id)來使此

進程的用戶與其他進程進行interact(交互)。這就使兩個毫不相差的進程通過這樣一個聯系連接起來。為了協助調試,Expect的調試信息經常會輸

出到標準錯誤輸出(或是是標準輸出,為了記錄日志和調試信息)。同樣,解釋器也會交互的從標準輸入讀取字符。例如:下面的代碼,建立了一個登錄進程,它呼

叫用戶,然后使雙方連接在一起。當然其他進程也可以取代這里的login進程。一個腳本,允許在不提供用戶名與密碼的情況下正常工作。

spawn login

set login $spawn_id

spawn tip modem

# dial back out to user

# connect user to login

interact -u $login

為了發送輸出給多個進程,必須使用-output選項指定spawn_id列表。同樣,要給多個進程輸入字符,需要使用-input選項(-input

和-output,還有expect中的-i選項都支持列表,除了特殊變量any_spawn_id在interact命令中無效,在expect中有

效)。

所有接下來的選項或字符串(或模式)對當前的輸入有效。直到下一個input選項為止。如果沒有-input選項,-output選項暗含表示”–

input $user_spawn_id

–output”(在不含有-input選項的模式中也一樣)。如果指定了一個-input選項,那么它將覆蓋$user_spawn_id,如果出現第

二個–input選項,那么它將覆蓋$spawn_id,還有可能會指定更多的-input選項。

這兩個暗含的輸入進程把它們的輸出默認分別把$spawn_id和$user_spawn_id作為它們的輸出(做了調換)。如果-input選項后面

沒有-output,那么這個進程的輸入將會被忽略。-i選項介紹了一種當沒有使用-input或是-output選項時的替代方式。-i選項暗含一個

-o選項。

使用“間接”spawn_id列可以改變交互進程 (“間接”spawn_id列已經在expect命令里面講過) 。“間接”spawn_id列可以通過-i,-u,-input或是-output選項指定。

interpreter??[args]

使用戶交互的輸入Expect或是Tcl命令,每個命令的結果都會被打印出來。

Break和continue會使控制結構(for循環,子函數等等)按照正常的方式運行,但return會使interact把信息返回給它的調用函

數。Inter_return會使它的調用函數返回。例如,如果一個子函數foo調用了inter_return,在執行inter_return時,子

函數foo會返回。其他命令使interpreter繼續提示輸入新的命令。默認情況下,提示包含兩個整數。第一個表示the depth of

evaluation stack嵌套的層數(也就是Tcl_Eval被調用了多少次)。第二個參數是Tcl的history

identifier歷史指針。提示符可以通過定義一個叫做”prompt1”的子函數來設置,這個子函數的輸出會成為下一個提示符。如果一條語句中包含

半開的(也就是一個,不是一對兒)引號,大括號,中括號或是小括號,那么下一個提示符會被放在新一行。第二個提示符同樣也可以通過定義一個叫做

”prompt2”的子函數來設置。在interpreter執行過程中,終端使用“精加工”模式,即使它的調用函數使用的是“原始中”模式。如果在沒有

使用-eof選項的情況下,標準輸入被關閉,那么interpreter就會返回。如果使用了-eof選項,那么將調用下一個參數。

log_file [args] [[-a] file]

如果指定了文件名,那么log_file命令會把會話的記錄寫入文件(從執行這條語句開始),如果沒有給定任何參數,那么log_file命令會停止記

錄。前面的日志文件都將被關閉。不指定文件名,還可以通過-open或是-leaveopen選項來指定Tcl文件描述符,這和spawn命令的用法一樣

(參見spawn命令)。-a選項強制把log_user命令產生的輸出記錄到日志。默認情況下,為了在一次會話中能很方便的多次關閉日志記

錄,log_file命令會把輸出信息添加到文件尾,而不是覆蓋原來的內容。如果想覆蓋原來的內容,可以使用-noappend選項。-info選項使

log_file命令返回關于最近的non-info(非info選項)參數的描述。

log_user -info|0|1

默認時,send/expect對話會被記錄到標準輸出中,可以通過log_user 0來禁止,通過log_user 1來恢復。輸出到日志文件維持不變。-info選項使log_user命令返回關于最近的non-info(非info選項)參數的描述。

match_max [-d] [-i spawn_id] [size]

這個命令定義Expect內部使用的緩沖區大小。如果沒有參數,返回當前大小。如果使用-d選項的話,將緩沖區設置為默認大小(初始的默認大小是

2000 Bytes)。如果使用了-i選項,那么設置的是對應于spawn_id的進程的緩沖區大小。否則設置的是當前進程的。

overlay [-# spawn_id] [-# spawn_id] [...] program [args]

終止當前的Expect程序,執行program

args。一個連字符沒有指定參數,那么連字符將被放到命令之前,就像它是一個登錄Shell一樣。除了那些在命令行中做為參數指定的spawn_id

外,其他將全部被關閉。這些在命令行中指定的spawn_id將被重定向到指定的文件描述符。這些spawn_id被重定向到文件描述符是為了新程序來繼

承。例如,下面的命令運行chess程序,而且允許當前程序--chess master(chess控制者)來控制。

overlay -0 $spawn_id -1 $spawn_id -2 $spawn_id chess

雖然它犧牲了執行程序化交互的能力,因為Expect已經失去控制權,但還是要比”interact –u”更有效率。注:在這里,沒有提供控制終端,因此,如果你斷開或是重定向了標準輸入,那么控制作業的程序(Shell,login等等)將不能正常訪問。

parity [-d] [-i spawn_id] [value]

定義parity是否需要與當前監視的進程的輸出分隔開。如果設為0,則是分隔開,否則將不分開。如果沒有參數的話,將返回當前值。-d選項將

parity設置為默認的值(初始默認值為1,不分開)。-i選項用來指定需要設置parity值的,對應于spawn_id的進程。否則設置當前進程的

parity值。

remove_nulls [-d] [-i spawn_id] [value]

此命令用來定義null在匹配模式或是存儲到變量expect_out或是interact_out之前,是否需要與監視進程的輸出分隔開。如果設為 1,則分開,如果為0,則不

總結

以上是生活随笔為你收集整理的proc编译手册_Expect 手册 中文版的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

日韩.com | 伊人导航 | 97看片吧 | 久久不射电影院 | 久久午夜电影 | 欧美成亚洲 | 久久久91精品国产一区二区三区 | 国内精品久久久久久久久 | 四虎国产精品免费观看视频优播 | 国产一区二区三区免费观看视频 | 九九天堂| 九九九九九九精品任你躁 | 欧美污网站 | 日韩欧美电影网 | 久久久久成人精品亚洲国产 | 久久伊人热 | 91av色 | 久草在线久草在线2 | 国产成人精品网站 | 最近最新最好看中文视频 | 亚洲综合色视频在线观看 | 日日草夜夜操 | 久久a久久 | 日韩亚洲国产中文字幕 | 亚洲日本在线一区 | 日韩婷婷 | 欧美狠狠操 | 日日干影院| 中文字幕激情 | 日韩av看片 | 97av超碰 | 午夜资源站 | 91香蕉视频720p | 色婷五月| 九九热在线视频免费观看 | 日韩三级在线观看 | 国产精品欧美久久久久天天影视 | 久久综合电影 | 五月天av在线 | 国产成人久久精品一区二区三区 | 91av小视频| 91成人网在线观看 | 久久综合色天天久久综合图片 | 在线播放日韩 | 欧美性超爽 | 天天操天天插 | 亚洲天堂精品视频 | 91精品在线播放 | 免费精品 | 国产高清视频免费 | 黄色www免费| 国产又粗又猛又黄又爽的视频 | 成人在线观看资源 | 九九视频免费观看视频精品 | 国产精品女人网站 | 亚洲精品成人在线 | 久久情网| 亚洲 欧美 综合 在线 精品 | 狠狠色狠狠色终合网 | 天天鲁天天干天天射 | 首页av在线| 91精品免费 | 亚洲伦理一区 | 亚洲国产高清视频 | 91成人破解版 | 99久久久国产精品免费观看 | 成人app在线免费观看 | 欧洲精品视频一区 | 99久久久久成人国产免费 | 91精品一区在线观看 | 欧美韩国日本在线观看 | 成年人免费av网站 | 婷婷黄色片| 精品一区二区在线观看 | 精品视频区 | 中文字幕久久网 | 91色蜜桃 | 天天操狠狠操夜夜操 | 久久女同性恋中文字幕 | 一区二区日韩av | 欧美一级在线观看视频 | 色鬼综合网 | 婷婷色综 | 国产69精品久久99不卡的观看体验 | 六月丁香在线视频 | 嫩模bbw搡bbbb搡bbbb| 免费黄色网止 | 久久久99精品免费观看乱色 | 免费在线观看av的网站 | 四虎国产精品免费观看视频优播 | 一本一本久久a久久精品牛牛影视 | 六月色 | 久久久久国产一区二区 | 欧美激情片在线观看 | 久久人人爽人人 | 国产黄| 精品久久久久_ | 久久精品国产第一区二区三区 | 一级黄色片毛片 | 国产在线不卡精品 | 天天天天色射综合 | 国产精品成人一区二区三区吃奶 | 国产精品va视频 | 亚洲激情婷婷 | 欧美日韩1区2区 | av高清网站在线观看 | 日韩精品欧美一区 | 精品毛片在线 | 久久国产热 | 97久久精品午夜一区二区 | 日韩在线播放欧美字幕 | 99 视频 高清 | 91免费高清在线观看 | 国产精品99久久久久 | 国产精品99蜜臀久久不卡二区 | 国产精品av一区二区 | 久久久久久久久久久免费 | 亚洲成人免费在线观看 | 99视频在线精品国自产拍免费观看 | 国产一区二区三区免费视频 | 国产99久久久精品 | 涩涩资源网 | 国产精品免费一区二区三区在线观看 | 一区二区视频在线播放 | 99re8这里有精品热视频免费 | 77国产精品 | 91视频传媒| www,黄视频| 国产中文字幕视频在线观看 | 日韩欧在线 | 亚洲精品视频www | 久久成人久久 | 亚洲专区路线二 | 黄色小说在线观看视频 | 欧美日韩久久不卡 | 色视频网页 | 91av观看| 黄色一级在线视频 | 超碰公开97 | 国产亚洲一级高清 | 色婷av| 国产手机免费视频 | 色在线视频网 | 国产高清在线a视频大全 | 999久久精品 | 日韩免费在线观看视频 | 999男人的天堂 | 三级黄色在线 | 欧美日一级片 | 91在线网址 | 国产亚洲成人网 | 中文字幕日本在线 | 美女视频免费一区二区 | 天天爱天天干天天爽 | 日本黄网站 | 69热国产视频| 激情久久五月天 | 91丨精品丨蝌蚪丨白丝jk | 亚洲精品在线看 | 美女在线观看网站 | 色综合久久久久久久久五月 | 在线视频日韩精品 | 日韩三级精品 | 在线观看免费福利 | 97在线视频免费看 | 在线观看网站你懂的 | 色综合久久久久网 | 欧美在线观看视频一区二区 | 天天操狠狠操夜夜操 | www日韩视频 | 午夜久久久影院 | 中文字幕乱码亚洲精品一区 | 国产91影视 | 狠狠操操操 | 亚洲美女久久 | 天天草综合网 | 日日骑 | 国产99久久久国产精品 | 欧美疯狂性受xxxxx另类 | 日韩av五月天 | 99精品国产高清在线观看 | av丝袜在线 | 亚洲最新av在线网站 | 毛片无卡免费无播放器 | 狠狠色丁香| 国产不卡网站 | 国产美女免费看 | 欧美日韩精品在线 | 狠狠色丁香婷婷综合久小说久 | 欧美日韩国产一区二区三区 | 国产精品永久免费在线 | 亚洲国产中文在线 | 日本69hd | 国产97色 | 久草在线高清 | 天天久久综合 | 国产黄色视 | 欧美analxxxx| 成年人视频在线免费播放 | 中文字幕第一页在线vr | a午夜在线 | 国产在线日本 | 精品视频国产一区 | 久久久久久久久久电影 | 日韩精品中文字幕在线不卡尤物 | 久久久久久久久久久综合 | 日韩精品一区二区久久 | 97中文字幕 | 成人一区电影 | 成人国产精品入口 | 在线精品一区二区 | 国内久久久久久 | 国产在线欧美在线 | 国产精品久久久久aaaa九色 | 天天干天天搞天天射 | 国产视频一区在线免费观看 | 一区精品久久 | 日韩免费观看一区二区 | 最新色站 | 91看片看淫黄大片 | 成年人免费观看在线视频 | 成人黄大片视频在线观看 | 这里只有精品视频在线 | 九九九热精品 | 久久综合偷偷噜噜噜色 | 国产专区在线播放 | 日韩激情视频在线 | 国产夫妻性生活自拍 | av福利在线看 | 夜夜爱av | 午夜精品中文字幕 | 黄污网站在线 | 首页av在线 | 亚洲精品九九 | 98福利在线 | 成人福利在线 | 欧美久久九九 | www免费视频com━ | 青草视频在线播放 | 在线观看色网 | 精品xxx| 在线观看福利网站 | 国产在线传媒 | 精品久久国产精品 | 欧美日bb| 亚洲精品在线二区 | 激情视频一区二区三区 | 国产精品久久久久久久电影 | 91av在 | 天天操夜操视频 | 天天操狠狠操网站 | 日韩电影久久久 | 国产小视频在线观看 | 免费久久片 | 亚洲精品自在在线观看 | 中文字幕高清有码 | 日韩色在线 | 国产午夜剧场 | 精品国产一二区 | 亚洲成人黄色在线观看 | 日韩午夜av | 在线播放一区二区三区 | 久久精品女人毛片国产 | 91爱爱电影 | 久久精品牌麻豆国产大山 | 成人午夜精品福利免费 | 伊人狠狠操 | 日本h视频在线观看 | 日韩高清网站 | 又色又爽又激情的59视频 | 国产在线视频一区二区三区 | 一级电影免费在线观看 | 福利精品在线 | 99视频网址 | 国产精品嫩草影院123 | 日韩在线视频免费观看 | 精品国产不卡 | 婷婷 综合 色| a视频免费看 | 国产乱视频 | 91在线看免费 | 亚洲精品视频一 | 中文字幕一区二区三区在线视频 | 日韩中文字幕在线不卡 | 国产成人一区二区啪在线观看 | 99久久激情| 国产精品女同一区二区三区久久夜 | 99免费国产 | 久草在线观看视频免费 | 天海翼一区二区三区免费 | 国产在线观看中文字幕 | 激情视频免费观看 | www黄色软件| 婷婷六月激情 | 中文字幕二区三区 | 国产日韩欧美在线播放 | 成人午夜免费剧场 | 久草综合视频 | 在线精品视频免费播放 | 亚洲女在线| 天天操天天射天天爽 | 久久午夜国产精品 | 日本中文字幕在线免费观看 | 五月婷婷丁香网 | 91色在线观看 | 久艹在线播放 | 亚洲成av人片在线观看香蕉 | 高清国产在线一区 | 在线播放日韩av | 最新99热| 69av在线视频 | 中文字幕av在线播放 | 天天在线视频色 | 国产精品视频99 | 久久久久免费精品视频 | 亚洲乱码精品久久久久 | 97成人在线视频 | 成人久久久久久久久 | 成人动漫精品一区二区 | 在线电影日韩 | 色播五月激情五月 | 久久久久国产a免费观看rela | 草久中文字幕 | 最近更新中文字幕 | 国产免费视频一区二区裸体 | 在线观看免费av片 | 欧美一区二区三区在线观看 | 日本免费久久高清视频 | 色综合久久久久久久久五月 | 在线看的av网站 | 国产黄色片一级三级 | 国产精品久久久久久久午夜片 | 久爱精品在线 | 狠狠的操狠狠的干 | 91在线视频精品 | 91麻豆免费视频 | 国产在线观看一 | 国产一区二区三区在线免费观看 | 9草在线| 免费视频区 | 中文字幕黄网 | 国产精品一二 | 欧美一级免费高清 | 97人人人人 | 精品国产日本 | 亚洲精品午夜aaa久久久 | av一级片在线观看 | 波多野结衣一区二区 | 国产在线精品一区二区不卡了 | 国产视频午夜 | 在线观看亚洲电影 | 久久精品永久免费 | 欧美动漫一区二区三区 | 国产欧美在线一区 | 精品亚洲免费 | 在线观看亚洲精品 | 91黄色在线视频 | 久草在线视频免费资源观看 | 国产剧情在线一区 | 久久免费视频网站 | 亚洲视频精品 | 国产精品美女免费视频 | 日韩在线播放欧美字幕 | 日本三级久久 | 日日干,天天干 | 69人人| 香蕉免费 | 在线观看av网 | 欧美日韩国产三级 | 亚洲综合成人在线 | 久久久免费少妇 | 色婷婷在线观看视频 | 99久久久久国产精品免费 | 欧美a在线免费观看 | 国模精品一区二区三区 | 国产视频 亚洲精品 | 一区二区久久久久 | 国产亚洲精品久久 | 国产激情久久久 | 国产亚洲成av片在线观看 | 国产精品嫩草在线 | 国产午夜av | 不卡的av在线播放 | 亚洲激情六月 | 久久精品a| 久久全国免费视频 | 国产精品99久久久久久有的能看 | 五月天激情开心 | 精品国产一区二区三区久久久蜜月 | 日韩精品久久一区二区三区 | 久久99亚洲精品 | 久久久久久久久久影院 | 久久久精品久久日韩一区综合 | 亚洲黄色片一级 | 久久免费毛片 | 日韩免费三区 | av免费在线看网站 | 久久99精品久久久久久秒播蜜臀 | 色橹橹欧美在线观看视频高清 | 精品国产自在精品国产精野外直播 | 久久精品视频在线观看免费 | 99999精品| 亚洲高清视频在线观看 | 国产精品网址在线观看 | 五月天综合激情网 | 国产精品免费视频网站 | 亚洲精品国产精品国自 | 亚洲高清在线视频 | 夜夜操狠狠干 | www.午夜| 黄色av网站在线观看 | 亚洲精品在线观看的 | 久久九九影视网 | 日韩伦理片hd | 国产剧情在线一区 | 韩国中文三级 | 人人澡人人模 | 黄色91免费观看 | 五月婷婷开心 | 亚洲精品电影在线 | 国产精品一区二区三区久久久 | 久久亚洲精品电影 | 亚洲精选久久 | 久久久久这里只有精品 | 91精品国产乱码久久桃 | 中文字幕在线观看视频免费 | 五月天激情视频在线观看 | 美女av在线免费 | 欧美狠狠色| 五月婷婷精品 | 久久国产精品99国产精 | 天天做综合网 | 91在线观看黄| 午夜天使 | 88av视频 | 午夜久久久精品 | 狠狠操操 | 麻豆视频入口 | 狠狠干夜夜操天天爽 | 免费在线观看av网站 | 亚洲综合视频在线播放 | 亚洲伦理电影在线 | 久久激情视频 久久 | 韩国av永久免费 | 国产一级一片免费播放放a 一区二区三区国产欧美 | 久久www免费视频 | 日日干,天天干 | 欧美成人999| 免费大片av | 一区二区欧美日韩 | 久久久精品国产一区二区三区 | 日韩美女久久 | 国产免费三级在线观看 | 精品一区二区三区四区在线 | 最新黄色av网址 | 成人av片免费看 | 友田真希x88av | av在线观| 亚洲精品久久久久久中文传媒 | 久久高清国产 | 精品一区 在线 | 国产又粗又猛又色 | 国产精品久久久久久一二三四五 | 天天爱天天射 | 99视频在线免费播放 | 国产高清成人 | 99久久精品视频免费 | 在线一区观看 | 日韩精品一区二区三区免费观看 | 久草在线最新视频 | 91麻豆精品国产91久久久更新时间 | 欧美日韩精品在线免费观看 | 黄色av网站在线观看 | 成人黄色在线观看视频 | 日本成人黄色片 | 精品产品国产在线不卡 | 免费在线观看的av网站 | 亚洲视频大全 | 欧美日韩三级在线观看 | 国产字幕av | 色婷婷久久一区二区 | 成年人黄色免费看 | 夜色.com| 亚洲视频999 | 中文字幕免费观看全部电影 | 久草影视在线观看 | 日韩激情中文字幕 | 日韩在线大片 | 免费视频你懂的 | 国产精品永久免费 | 婷婷精品进入 | 亚洲精品美女 | 在线播放你懂 | 欧美精品一区二区在线观看 | 天天曰夜夜操 | 中文日韩在线 | 9草在线 | 亚洲成av人电影 | 91日韩国产| 一区二区三区高清在线 | 中文av资源站| 国产精品亚洲a | 美女久久99 | 日韩视频在线不卡 | 国产精彩在线视频 | 色婷久久 | 九九视频在线播放 | 婷婷色综合网 | 国产精品久久久 | 成人黄色小说视频 | 国产白浆视频 | 亚洲一级黄色 | 国产在线观看xxx | 日本论理电影 | 久久在线免费 | 久久久香蕉视频 | 亚洲春色奇米影视 | 久草在线电影网 | 人人干人人干人人干 | 色婷婷激情四射 | 青青河边草免费 | 66av99精品福利视频在线 | 91亚洲视频在线观看 | 国产成人亚洲在线观看 | 国产原厂视频在线观看 | 亚洲欧美日韩国产一区二区 | 国产资源av | 免费美女av | 99久久久国产精品免费99 | 婷婷丁香久久五月婷婷 | 伊人婷婷激情 | 五月天婷婷在线播放 | 一区二区三区高清在线观看 | 4438全国亚洲精品在线观看视频 | 黄色免费高清视频 | 日韩精品免费一区 | 婷婷夜夜 | 久久99免费观看 | 西西444www大胆高清视频 | 九九视频在线 | 97超碰资源 | 一级黄色免费 | 天天综合网 天天综合色 | 免费看一级一片 | 国产福利不卡视频 | 蜜桃视频色 | 国产在线观看二区 | 亚洲国产精品成人va在线观看 | 中文字幕免费在线看 | 亚洲欧美在线观看视频 | av片无限看| aa一级片 | 夜夜操天天操 | 五月天中文字幕mv在线 | 综合网在线视频 | 久艹在线观看视频 | 国产精品video爽爽爽爽 | 久久97久久| 天天插综合 | 日韩在线观看第一页 | 正在播放 久久 | 在线观看蜜桃视频 | 日韩av不卡在线 | 日一日操一操 | 国产亚洲久一区二区 | 久av在线| 久久视 | 四虎在线免费观看 | 欧美久久久久久久久久 | 91免费高清观看 | 日韩毛片久久久 | 久久9999久久免费精品国产 | 超碰伊人网 | 日韩电影在线观看中文字幕 | 国产精品美女久久久久久久 | 99精品视频在线观看免费 | 激情欧美丁香 | 2019中文在线观看 | 天天干夜夜夜操天 | 国产精品一区在线 | 91香蕉亚洲精品 | 日韩久久久久久久久久 | 一区二区电影在线观看 | 在线免费国产视频 | 99色婷婷 | 日本一区二区三区免费观看 | 久草精品网 | 日韩视频免费观看高清 | 夜夜躁狠狠躁日日躁视频黑人 | 麻豆视频在线观看免费 | 国产无区一区二区三麻豆 | 日本护士撒尿xxxx18 | 国产精品黄 | 91毛片在线观看 | 黄色av网站在线观看 | 欧美尹人| 最新日本中文字幕 | 午夜精品av| 人人射av | 免费美女久久99 | 久久国产精品99久久久久久进口 | 亚洲电影在线看 | 国产精品久久久久久久毛片 | 久久99精品波多结衣一区 | 日韩在线观看视频一区二区三区 | 免费在线观看一级片 | 欧美最爽乱淫视频播放 | 女人高潮特级毛片 | 一级片在线 | 视频国产在线观看18 | 精品国产精品一区二区夜夜嗨 | 92精品国产成人观看免费 | 午夜精品久久久久久久99无限制 | 在线成人免费电影 | 日韩区视频 | 亚洲精品国产精品国产 | 国产精品久久久久一区二区国产 | 成年人视频在线免费播放 | 国产精品第一页在线 | 一区二区理论片 | 欧美a视频在线观看 | 欧美在线aa | 欧美国产精品一区二区 | 黄a在线观看 | 国产日产在线观看 | 成人精品国产 | 国产精品久一 | 色噜噜日韩精品欧美一区二区 | 久碰视频在线观看 | 天天干夜夜想 | 久久免费视频精品 | 中文字幕 国产视频 | 久久精品79国产精品 | 欧美极品少妇xxxx | 96视频免费在线观看 | 日韩丝袜在线观看 | 日韩理论片在线 | 国产1区在线 | 久久天天躁狠狠躁亚洲综合公司 | 久草视频免费观 | 欧美激情一区不卡 | 999久久久欧美日韩黑人 | 91中文字幕在线视频 | 国产专区一 | 欧美成人影音 | 国产精品成人a免费观看 | 午夜影院三级 | 999热视频| 福利一区二区三区四区 | 精品成人免费 | 天天干天天色2020 | 男女精品久久 | 天天干夜夜夜操天 | 亚洲精品ww | 18国产精品白浆在线观看免费 | 国产91在线观看 | 色狠狠干 | 国产一级片一区二区三区 | 亚洲aⅴ久久精品 | 欧美日韩久 | 福利视频导航网址 | 国产 欧美 日本 | 中文字幕一区二区三区乱码在线 | 粉嫩av一区二区三区四区 | 五月婷婷六月丁香激情 | 黄网站色视频 | 精品国产一区二区三区蜜臀 | 中文字幕在线免费看 | 麻豆精品国产传媒 | 一区二区三区精品在线视频 | 中文字幕在线观看亚洲 | 最新av网址在线观看 | 99中文在线| 黄色三级免费片 | 一级全黄毛片 | 91精品国产自产老师啪 | 日韩精品一区二区三区三炮视频 | 69国产盗摄一区二区三区五区 | 四虎在线免费 | 精品免费99久久 | 波多野结衣在线观看一区二区三区 | 国产一区二区高清视频 | 国产免费不卡av | 999免费视频 | 国产一级不卡毛片 | 成人亚洲综合 | 精品一区二区久久久久久久网站 | 国产精品乱码久久久久 | 午夜婷婷在线播放 | 婷婷六月在线 | 国产精品免费成人 | 最新国产精品亚洲 | 亚洲最新av在线网址 | 五月婷激情 | 亚洲精品自在在线观看 | 97成人在线 | 丁香九月婷婷 | 亚洲经典视频 | 99九九热只有国产精品 | 少妇bbb搡bbbb搡bbbb′ | 成人福利在线播放 | 免费久久精品视频 | 国产永久免费高清在线观看视频 | www.com久久 | 亚洲成a人片77777潘金莲 | 亚洲综合爱 | 久久亚洲成人网 | 92精品国产成人观看免费 | 国产电影黄色av | 国产毛片久久久 | 色五丁香 | 久草a在线 | 精品视频久久久久久 | 天天综合精品 | 97电影在线 | www好男人| 麻豆影视在线播放 | 最新国产精品久久精品 | 婷婷色综 | 啪啪av在线 | 中文字幕久久精品一区 | 玖玖爱在线观看 | 麻花豆传媒一二三产区 | 超碰在线人人艹 | 国产精品女主播一区二区三区 | 国产精品嫩草在线 | 日韩一区二区免费在线观看 | 一区二区中文字幕在线 | 色av男人的天堂免费在线 | 国产黄色精品在线 | 成人一区二区在线观看 | 亚洲毛片在线观看. | 成人h在线观看 | 精品久久久久国产 | 91精品办公室少妇高潮对白 | 中文字幕在线视频免费播放 | 亚洲精品中文字幕在线 | 99国产免费网址 | 久久手机免费视频 | 97国产大学生情侣酒店的特点 | 97人人爽 | 少妇av网| 中文字幕资源站 | 天天综合五月天 | 欧美男同网站 | 91人人视频在线观看 | 国产日本在线播放 | av免费播放 | 久草在线视频在线观看 | 欧美综合干 | 99久久精品久久久久久动态片 | 国产小视频在线看 | 亚洲精品合集 | 91av九色| 久久免费成人网 | 韩国精品一区二区三区六区色诱 | 视频一区二区精品 | 亚洲成av人片在线观看香蕉 | 亚洲狠狠丁香婷婷综合久久久 | 久久免费99精品久久久久久 | 激情久久久 | 黄色网址国产 | 欧美亚洲另类在线视频 | 91超级碰碰| 成人97视频一区二区 | 精品v亚洲v欧美v高清v | 韩日成人av | 国产剧情一区二区在线观看 | 国产色拍 | 国产超碰在线观看 | 亚洲精品videossex少妇 | 精品视频123区在线观看 | 欧美激情在线看 | 天天天天综合 | 天天操综合网站 | 久草精品资源 | 国产精品免费在线播放 | 在线成人国产 | 天堂久色 | 久久久久久国产精品999 | 草久热| 91成人免费视频 | 天天天天综合 | 天天人人 | 日本久久久精品视频 | 在线观看免费福利 | 99精品视频在线观看视频 | 91香蕉视频黄 | 国产一区精品在线观看 | 中文字幕av在线电影 | 一级一片免费观看 | 黄色精品免费 | 毛片一区二区 | 91九色国产在线 | 国产免费黄视频在线观看 | 国产91对白在线播 | 99在线观看免费视频精品观看 | 免费观看特级毛片 | 日韩av成人在线观看 | 操高跟美女 | 久久艹国产视频 | 国产一区在线观看免费 | 色噜噜日韩精品一区二区三区视频 | 偷拍区另类综合在线 | 国产精品久免费的黄网站 | 综合久久综合久久 | 四虎成人在线 | 精品999久久久 | 91九色pron| 国产少妇在线观看 | 欧美日韩视频在线播放 | 日本精品久久久久中文字幕5 | 久久国产日韩 | 一区二区精品国产 | 成人在线视频在线观看 | 亚洲精品h| 一级片免费观看视频 | 亚洲国产日韩av | 久久伊人热 | 美女视频国产 | 久久免费视频99 | 亚洲精品视频免费在线 | 亚洲精品视频在线播放 | 亚洲黄色av网址 | 国产视频不卡 | 天天操福利视频 | 亚洲综合一区二区精品导航 | 亚洲免费在线播放视频 | 超碰在线人人97 | 激情大尺度视频 | 综合激情婷婷 | 亚洲精品在线视频观看 | 久久精品视频在线观看免费 | 国产视频二区三区 | 久久国产成人午夜av影院潦草 | 91夫妻自拍 | 999久久久久久久久久久 | 国产精品一区二区三区视频免费 | 丝袜一区在线 | 中文在线中文a | 久久久久久久久久久久国产精品 | 四虎永久国产精品 | 亚洲黄在线观看 | 国产福利一区二区三区视频 | 精品一区二区久久久久久久网站 | 国产91aaa | 中文一区在线观看 | 亚洲影院国产 | 91九色蝌蚪视频网站 | 国产丝袜美腿在线 | av成人在线播放 | 成人a在线观看高清电影 | 成人片在线播放 | 亚洲免费成人 | 免费大片av | 91视频亚洲 | 欧美a视频 | 国产精品女同一区二区三区久久夜 | 国内精品久久久久久久97牛牛 | 久久在线免费 | 又黄又爽又色无遮挡免费 | 精品高清美女精品国产区 | 视频一区二区三区视频 | 国产成人久久精品77777综合 | av电影免费 | 天天摸天天舔 | 国产精品嫩草影视久久久 | 日韩av不卡在线 | 国产日韩精品一区二区三区在线 | 欧美 日韩精品 | 国产资源精品在线观看 | 在线看片一区 | 国产精品区二区三区日本 | 日韩欧美在线免费观看 | 精品视频999 | 日日操天天操夜夜操 | 看av免费 | 18国产精品白浆在线观看免费 | 中文字幕在线高清 | 久久久久国产一区二区三区四区 | 97操操操| 久久免费国产精品1 | 免费看的黄色网 | 国产一二三区在线观看 | ,午夜性刺激免费看视频 | 国产亚洲精品无 | 国产精品自产拍在线观看蜜 | 成人毛片网 | 欧美有色 | 久久久五月婷婷 | 日韩综合一区二区三区 | 91九色视频在线播放 | 亚洲精品高清在线 | 色综合久久中文字幕综合网 | 天天爱天天色 | 丁香伊人网| 欧美网站黄色 | 一区二区三区影院 | 国产毛片久久久 | 欧美一区二区在线免费看 | 久久精品国产免费看久久精品 | 国产成人av免费在线观看 | 玖玖在线看 | 国产在线一区二区 | 激情五月婷婷综合 | 国产精品白浆 | 麻豆免费精品视频 | 亚洲视频在线播放 | 日本激情视频中文字幕 | 日韩资源在线 | 欧美日韩视频 | 91在线亚洲 | 91高清免费看 | 中文字幕在线视频一区二区三区 | 国产精品久久久久9999吃药 | 免费色网 | 欧美日韩另类在线 | 日本一区二区三区视频在线播放 | 三级在线视频观看 | 精品视频中文字幕 | 丝袜网站在线观看 | 成年人在线 | 9热精品 | av免费观看网址 | 在线视频91 | 国产精品青草综合久久久久99 | 国产一级视频 | 99国产在线视频 | 亚洲视频综合在线 | 在线中文字幕电影 | 国产中文欧美日韩在线 | 日b视频在线观看网址 | 九九热有精品 | 夜又临在线观看 | 丁香视频五月 | 国产福利小视频在线 | 色播五月激情综合网 | 最新日本中文字幕 | 国产精品日韩久久久久 | 国产免费视频一区二区裸体 | 日韩欧美黄色网址 | 国产成人综合图片 | 91亚洲免费| 久久精品屋| 日韩精品无 | 成 人 黄 色 视频免费播放 | 欧美日韩亚洲精品在线 | 亚州精品一二三区 | 天天干天天碰 | 成人免费观看在线视频 | 狠狠狠狠狠狠干 | 午夜久草| 国产精品理论片 | 狠狠操狠狠干2017 | 国产剧情一区在线 | 国产午夜精品在线 | 免费黄色av.| 免费观看黄色av | 久久8精品 | av高清网站在线观看 | 亚洲国产日韩在线 | 亚洲成人av免费 | 久久综合电影 | 日韩精品一区二区三区在线视频 | 狠狠干狠狠艹 | 亚洲专区免费观看 | 99精品视频在线观看播放 | 免费看片成人 | 亚洲精品国产精品国自产观看浪潮 | 欧美日韩精品区 | 免费av片在线 | 美女视频是黄的免费观看 | 欧美一级片免费观看 | 亚洲精区二区三区四区麻豆 | 国产一区二区三区四区大秀 | 日本韩国精品在线 | 91人人爽久久涩噜噜噜 | 中文字幕在线观看完整 | 久草在线免费看视频 | 成年人在线观看 | 国产三级午夜理伦三级 | 欧美 高跟鞋交 xxxxhd | 超碰97网站 | 在线日韩中文字幕 | 国产精品18久久久 | 91.麻豆视频 | 91免费在线看片 | 超碰人人射 | av免费在线观看1 | 久久99热久久99精品 | 成人午夜免费福利 | 黄色一二级片 | 免费视频91蜜桃 | 欧美激情精品一区 | 久久久久久久久久福利 | 国产1区2区3区精品美女 | 国产一区欧美日韩 | 日韩欧美视频免费在线观看 |