我已經使用 ExpectJ Java 庫來自動化 Linux 伺服器上的一些作業,但是現在我需要自動化一個為每次執行發送不同文字回應的作業。這是輸出:
Last unsuccessful login: Fri Mar 30 15:21:31 CST 2012
********************************************************************************
********************************************************************************
[YOU HAVE NEW MAIL]
local-login [/home/user]%
在我的程式碼中我有以下內容:
s.expect("Login as:");
s.send("userlogin\n");
s.expect("userlogin@iphost's password:");
s.send("password\n");
我收到顯示的輸出,但無法發送下一個命令,因為我不知道如何讀取最後一個答案,我嘗試使用正則表達式,但它不起作用。
答案1
前面的橫幅文字不需要處理。 Expect 將等待,直到滿足其中一個條件(例如匹配字串/正規表示式或逾時)。先前的文字會被緩衝以供以後使用,但不是匹配的一部分。您需要處理的是尋找提示字串:local-login [/home/user]%
。如果您很清楚它可能會是什麼樣子(例如,總是有“[”目錄“]%”,那麼您可以編寫一個正規表示式來匹配它:
.*\[(/[^/]+)+\]%
確保正規表示式中沒有換行符/回車符,因為輸出不會有換行符/回車符。
答案2
我不認為你能夠使用正規表示式來匹配期待J。
它似乎就像他們依靠String.indexOf
尋找匹配
if (line.toString().trim().toUpperCase().indexOf(pattern.toUpperCase()) != -1)
pattern
所提供的預期字串在哪裡。
因此,請嘗試匹配子字串,看看是否效果更好。