proc完成后如何退出tcl代码

时间:2020-05-22 22:17:39

标签: tcl

我有一个代码,如下所示。 我使用hv(Altair超级视图)执行此操作,以加载并拍摄FE结果。

这是我在Linux终端上看到的结果日志:

*Ready
Loading Report...
Applying Report...
Ready
Ready
Capturing...
Ready*

它停留在“就绪”状态,除非我按Ctrl + c或输入它,否则它不会返回到终端。 proc结束后,如何使代码退出终端?

所以我刚刚发现这些命令作为子进程运行,这就是为什么我无法使用exit命令将其杀死的原因。

proc BatchMain { } {
    set inputdeck [lindex $::argv 6]
    set resultfile [lindex $::argv 7]
    puts $inputdeck
    puts $resultfile

    set t [::post::GetT]
    hwi GetSessionHandle sess$t
    sess$t GetProjectHandle proj$t
    hwi OpenStack
    sess$t LoadReport Batch_Process.tpl
    sess$t ApplyReport Batch_Process replace true false 2 $inputdeck $resultfile

    set numpages [proj$t GetNumberOfPages];
    for {set i 1} {$i <= $numpages} {incr i} {
        proj$t SetActivePage $i
        proj$t GetPageHandle pg$t $i
        pg$t Draw
        pg$t ReleaseHandle
        sess$t CaptureScreen png image_$i.png
    }

    hwi CloseStack
    proj$t ReleaseHandle
    sess$t Close
}

BatchMain

1 个答案:

答案 0 :(得分:0)

停止Tcl程序的典型方法是调用exit命令。您可以将其放在您的BatchMain中,或作为自己的调用:

# ... procedure definition as in the question ...

BatchMain
exit

exit命令带有一个可选的退出代码参数,具有退出代码含义的常规定义,其中0是默认值。在正常情况下,exit根本没有Tcl结果,因为从脚本的角度来看它永远不会完成执行。

在某些情况下,Tcl将为您呼叫exit。其中最引人注目的是当执行脱离经典tclsh脚本的结尾时。