我正在运行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过程输出都不在日志文件中打印。你能指出我做错了吗?
提前感谢您的帮助。
答案 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
,其行为类似于puts
和send_log
。请注意,send_user
不包含新行,因此调用者应该包含它。
答案 1 :(得分:0)
此外,我们可以通过搁浅[open $ file_name w]命令创建我们自己的日志文件,并继续将所有内容写入该文件。