【问题标题】:a question about source in Tcl关于 Tcl 中源的问题
【发布时间】:2011-06-28 14:54:13
【问题描述】:

我有一个名为 test7.tcl 的文件:

namespace eval ::dai {
   variable name "ratzip"
   variable birthday "1982"
   proc hello {} {
      variable name
      variable birthday
      puts "Hello, I am $name birthday is $birthday"
   }
}

我想将此文件导入另一个文件,以这种方式称为 test8.tcl:

source test7.tcl

::dai::hello

但它给了我错误:无法读取文件“test7.tcl”:没有这样的文件或目录

但是这两个文件在同一个文件夹下,怎么回事?

【问题讨论】:

  • 我打赌你没有像这样运行 test8.tcl:tclsh test8.tcl 或 source test8.tcl。相反,您位于不同的目录中,因此文件名不是您所期望的。使用file normalize test7.tcl 进行诊断以查看完整文件名是否符合您的预期。

标签: tcl


【解决方案1】:

要获取与当前执行脚本位于同一目录中的文件,请使用以下命令:

source [file join [file dirname [info script]] "test7.tcl"]

请注意,此在外部脚本(在您的情况下为 test8.tcl)中定义的过程中不起作用,因为它们通常在源代码完成后调用。如果您遇到这种情况,最简单的解决方法是将 info script 的输出保存在外部脚本的变量中(或者直接获取所有文件,而不是延迟获取最终最佳方法)。

【讨论】:

    【解决方案2】:

    使用source [file join [file dirname [info script]] test7.tcl]——这样你将通过它的完整路径名来获取目标文件,该路径名由执行source的文件的完整路径名构成;无论执行期间您当前的目录是什么,这都会起作用。

    【讨论】:

      【解决方案3】:

      您不必指定相对于test8.tcl 路径但相对于当前工作目录 的要获取的文件的路径。例如。使用绝对路径:

      source /path/to/test7.tcl
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-16
        • 1970-01-01
        • 2011-02-23
        • 1970-01-01
        • 2010-09-25
        • 2011-06-18
        • 2010-10-27
        • 1970-01-01
        相关资源
        最近更新 更多