我正在为语音网关内的Cisco TCL / IVR编写TCL。
我有一些公共假日日期的文本文件,我需要在主服务器上打开。如果在打开文件时返回错误,我想尝试使用辅助备份服务器。
代码:
if [catch {set fd [open $filename] } errmsg] {
error "Unable to open the file: $filename on Primary Server \n $errmsg"
set filename $httpsvr2$textfile
if [catch {set fd [open $filename] } errmsg] {
error "Unable to open the file: $filename on Primary Server \n $errmsg"
set Read 0
}
else {
set Read 1
}
}
else {
set Read 1
}
我试图使用Read
标志;如果是1
,那么我将在文件内搜索。如果是0
,那是因为文件无法在任何服务器上打开,因此我会将呼叫视为工作(非假期)一天。
但是,在我当前的代码中,当第一次尝试打开文件失败时,它会自动停止执行脚本。
第一次出错后如何继续执行?我应该制作一个程序并返回-1
之类的值吗?如果是这样,我怎么能这样做?
答案 0 :(得分:2)
命令error
退出脚本(意味着一旦达到error
,就可以说执行停止了)。通过puts
或更合适的渠道stderr
发送错误消息可能会更好:
puts stderr "Unable to open the file: $filename on Primary Server \n $errmsg"
答案 1 :(得分:0)
我会把它变成一个像你在想的程序
proc openFils { filename httpsvr2 textfile ) {
set fd -1
foreach f $filename $httpsvr2$textfile {
if { ! [file exists $f] } {
puts stderr "File $f not on system"
}
if [catch {set fd [open $f] } errmsg] {
puts stderr "Unable to open the file: $f \n $errmsg"
} else {
break
}
}
return $fd
}
现在您可以对文件句柄' fd'执行操作,注意:上面的脚本将打开并返回它可以的第一个文件,而不是两者。