在一个可执行的TCL脚本中,我定义了一个变量,该变量要导入另一个可执行的TCL脚本中。在Python中,可以通过在脚本底部使用以下惯用法来组合库和可执行文件:

# Library

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


TCL是否有等同的功能? There is for Perl

最佳答案

Tcl的等效项是将::argv0全局变量与info script命令的结果进行比较。

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


::argv0全局(技术上是标准tclshwish shell的功能,或者在C级别上调用Tcl_MainTk_Main的任何其他功能)具有主脚本的名称,或者为空如果没有主脚本,则为字符串。 info script命令返回当前正在评估的文件的名称,无论是通过source还是由于主外壳将其作为脚本运行。当当前脚本为主脚本时,它们将是同一件事。



正如mrcalvin在下面的注释中指出的那样,如果您的库脚本有时在未设置argv0的上下文中使用(自定义外壳程序,子解释器,嵌入式解释器,某些应用程序服务器等),则应增加一些内容。首先检查:

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

08-18 14:35