2

我正在运行 Tcl 脚本来连接 Telnet 端口。对于这个脚本,我想将所有 CMD 输出存储在一个日志文件中。如何在 Tcl 脚本中执行此操作?脚本如下:

#!/usr/bin/expect -f
#!usr/bin/expect
package require Expect
spawn telnet $serverName $portNum
expect "TradeAggregator>"
send "Clients\r"
expect "Client:"
send "1\r"
expect "1-Client>"
send "Pollers\r"
expect "Client Pollers"
send "2\r"
send "n\r"
expect ">"
set passwordOption $expect_out(buffer)
set searchString "Not confirmed" 
if {[string match *$searchString* $passwordOption]} { 
puts "match found" }\ 
else { 
puts "match not found" 
xmlPasswordChange $polName 
}

所有 puts 输出和 xmlPasswordChange 过程输出都没有打印在日志文件中。你能指出我做错了什么吗?

提前感谢您的帮助。

4

2 回答 2

12

log_file您想在要开始保存输出的位置插入命令。例如,如果要保存所有输出,则将其粘贴到开头:

#!/usr/bin/expect -f

log_file myfile.log ;# <<< === append output to a file

package require Expect
spawn telnet $serverName $portNum
expect "TradeAggregator>"
send "Clients\r"
expect "Client:"
send "1\r"
expect "1-Client>"
send "Pollers\r"
expect "Client Pollers"
send "2\r"

默认情况下,log_file如果文件存在则追加,或者创建一个新文件。如果你想每次都开始一个新的日志,那么:

log_file -noappend myfile.log

更新

根据您关于为什么puts输出进入控制台而不是日志文件的问题。我理解的方式是puts去控制台。如果要记录到日志文件(log_file使用命令打开的打开),请改用send_log命令:

log_file -noappend myfile.log
send_log "This line goes into the log file"
send_user "This line goes into both the log file and console\n"
puts "This line goes to the console"

上面的例子引入了另一个命令:send_user,它的作用putssend_log组合相同。注意send_user不包含新行,所以调用者应该包含它。

于 2013-04-12T08:03:17.143 回答
0

此外,我们可以通过 stanted [open $file_name w] 命令创建自己的日志文件,并继续将所有内容写入该文件。

于 2015-05-29T07:59:41.070 回答