在一个可执行的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
全局(技术上是标准tclsh
和wish
shell的功能,或者在C级别上调用Tcl_Main
或Tk_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...
}