TCL相当于Python的`if __name__ ==“__ main __”`

在一个可执行的TCL脚本中,我正在定义一个我想在另一个可执行的TCL脚本中导入的变量.在Python中,可以通过在一个脚本底部使用以下习语来组合库和可执行文件:

# Library

if __name__ == "__main__":
    # Executable that depends on library
    pass

TCL有同等的东西吗? There is for Perl.

最佳答案
Tcl的等价物是将:: argv0全局变量与info脚本命令的结果进行比较.

if {$::argv0 eq [info script]} {
    # Do the things for if the script is run as a program...
}

:: argv0全局(技术上是标准tclsh和wish shell的一个特性,或者在C级调用Tcl_Main或Tk_Main的任何其他东西)具有主脚本的名称,或者如果没有主脚本则为空字符串. info脚本命令返回当前正在评估的文件的名称,无论是按源还是由于主shell将其作为脚本运行.当前脚本是主脚本时,它们将是相同的.

正如mrcalvin在下面的评论中指出的,如果您的库脚本有时用于未设置argv0的​​上下文(自定义shell,子解释器,嵌入式解释器,某些应用程序服务器等),那么您应该首先添加一些检查:

if {[info exists ::argv0] && $::argv0 eq [info script]} {
    # Do the things for if the script is run as a program...
}

转载注明原文:TCL相当于Python的`if __name__ ==“__ main __”` - 代码日志