2011-02-13 98 views
2

在Windows上,我測試了TCL的expect腳本如下:爲什麼tcl期望意外退出?

package require Expect 
spawn "cmd.exe" 
expect ">" 
send "echo hello world\r" 

但印有 「F:\Workspace\>」 的輸出,那麼它退出。我希望它執行「echo hello world

回答

4

由於道路期待Windows上運行(它使用特殊的調試模式),也有不能捕捉到某些程序; telnet.exe是一個,而cmd.exe可能是另一個。 (相關的可執行文件在其文件標誌IIRC中設置了系統位)。

幸運的是,導致問題的程序通常是那些你實際上不需要需要來使用Expect自動運行的程序。 Tcl能夠直接與其他機器通話(通過打開socket),並且通常只需使用exec命令即可省略cmd,並且(在其他情況下)易於自動化。如果這只是一個測試,它代表您的real自動化,現在不要擔心太多;試着自動化真正的程序,儘管只是做一些簡單的事情(比如干脆地退出),從那裏開始並建立起來。

+1

FTP是您不需要使用Expect的另一個程序; Tcllib中有一個完全適合的FTP客戶端(奇怪地稱爲'ftp'!) –

0

如果你告訴我你真的想解決的問題可能會更好。但無論如何,你只需要輸入 echo hello world 而不是

send "echo hello world\r" 

得到你需要的結果。

歡呼 布賴恩

+0

我不知道爲什麼有人給我-1。在Windows上Expect的問題是衆所周知的。這就是爲什麼我問原來的提問者他真的想要解決什麼問題。與此同時,我給出的解決方案實際上工作,即如果你拿他的代碼,並用'echo hello world'替換'send'行,它就會按照他的要求做,即「我希望它執行」echo hello world「」 – TrojanName

+0

我沒有降低你的表現,但我猜測原因在於你沒有注意到提問者(可能)*真的*即將與其他應用程序一起工作並將CMD.EXE用作實驗的事實。 (畢竟,你實際上並不打算在生產中像這樣自動化CMD;它不需要它!)這意味着你的建議完全沒有幫助;與我的回答指出問題可能是什麼(CMD上的系統是神奇的)並且我希望鼓勵提問者用他們真實的應用程序進行嘗試。 –

+0

換句話說,當回答一個問題時,你必須考慮爲什麼對方會問這個問題,並以他們能夠理解和接受的方式表達對他們有幫助的答案。這需要大量的練習。 –