1

我需要source从 c++ 程序运行命令并传递文件名和一些参数。可能吗?我想在脚本中使用它们,比如命令行参数(with argc, argv0, ...)。http://www.astro.princeton.edu/~rhl/Tcl-Tk_docs/tcl/source.n.html这里没有具体说明怎么做。

4

3 回答 3

3

从 C 或 C++ 执行此操作时,您应该:

  1. 初始化 Tcl 库并创建一个 Tcl 解释器。
  2. 将全局变量argv0和设置为普通 Tcl 脚本argvargc期望的值。这正是tclsh所做的;除了以这种方式初始化之外,这些变量是完全普通的。
    • argv0是“主”脚本的名称,它可能是您即将使用的脚本source
    • argv是所有其他参数的 Tcl 列表;argc是该列表的长度。
  3. 用于Tcl_FSEvalFileEx(interp,pathPtr,encoding)执行文件;该source命令是该调用的一个非常薄的包装器。您可能希望将编码参数作为传递NULL,而pathPtr参数是一个Tcl_Obj引用。
于 2013-08-05T11:00:49.050 回答
2

如果您的脚本接受 中的参数argv,只需在获取此脚本之前设置此变量。

但是如果这个脚本调用exit,它会终止整个进程,通常不是你想要的。您可以使用从站 interp 来避免这种情况。

于 2013-08-05T08:35:49.753 回答
0

有 3 个预定义变量:

$argc - number items of arguments passed to a script.
$argv - list of the arguments.
$argv0 - name of the script.

因此,在您的情况下,假设源文件位于同一目录中,并且其名称作为第一个参数传递:

source [lindex $argv 0]
于 2013-08-05T07:08:22.387 回答