在
tcl
中如何找到加载的包的路径?
% tclsh
% package require csv
我想找出加载
csv
的路径。
在Python中,可以使用找到模块的路径
>>> import os
>>> print os.__file__
'/a/b/python2.2.1/linux26_x86_64/lib/python2.2/os.pyc'
我正在寻找类似的命令
tcl
首先,有两种包:“classic”和
“modules”,它们具有不同的底层机制,用于查找响应 package require ...
命令加载的内容。接下来,这两种包都能够做任何他们想做的事情来提供他们的功能。这意味着它们可以(但不限于):
source
仅包含一个 Tcl 文件或任意数量的文件。
load
ed。
modules 由一个独立的文件表示,但“经典”包可以自由地实现它们认为合适的自身。
另一方面,每个包通常向包子系统提供(使用某种方式)某些信息,可以使用package ifneeded
命令检索(和解析)这些信息。例如,在我的带有 ActiveState Tcl 8.5.x 的 Windows 系统上,我有:
% package require csv
0.7.2
% package ifneeded csv 0.7.2
package provide csv 0.7.2;source -encoding utf-8 {C:/Program Files/Tcl/lib/teapot/package/tcl/teapot/tcl8/8.3/csv-0.7.2.tm}
请注意,
package ifneeded
返回的只是一个Tcl脚本,旨在通过
eval
加载包,因此解析此信息本质上是临时且脆弱的。
join $::auto_path \n
https://www.systutorials.com/docs/linux/man/n-auto_path/ 可以在 tclsh 中添加新的或缺失的可加载包搜索目录: lappend auto_path /new_directoty
弱…… 我用一个简单的技巧来做到这一点......
package provide lib_filter 1.0
namespace eval lib_filter {
variable self [info script]
....
}
变量lib_filter::self
具有路径,可以轻松进行测试。 这适用于script,也适用于C,但必须由程序员添加。