TCL打开文件并检查错误

时间:2014-07-22 18:23:26

标签: tcl

我正在为语音网关内的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之类的值吗?如果是这样,我怎么能这样做?

2 个答案:

答案 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'执行操作,注意:上面的脚本将打开并返回它可以的第一个​​文件,而不是两者。