2011-02-13 60 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

换句话说,当回答一个问题时,你必须考虑为什么对方会问这个问题,并以他们能够理解和接受的方式表达对他们有帮助的答案。这需要大量的练习。 –