如何为tcl脚本创建日志文件

时间:2013-04-12 07:27:56

标签: tcl

我正在运行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过程输出都不在日志文件中打印。你能指出我做错了吗?

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:11)

您希望在要开始保存输出的位置插入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不包含新行,因此调用者应该包含它。

答案 1 :(得分:0)

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