我需要从c ++程序运行source
命令并传递filename和一些参数。可能吗?我想在脚本中使用它们,比如命令行参数(使用argc, argv0, ...
)。 http://www.astro.princeton.edu/~rhl/Tcl-Tk_docs/tcl/source.n.html此处未指定如何执行此操作。
答案 0 :(得分:3)
从C或C ++执行此操作时,您应该:
argv0
,argv
和argc
设置为普通Tcl脚本所需的值。这正是 tclsh 所做的;除了以这种方式初始化之外,变量完全是普通的。
argv0
是“主”脚本的名称,可能是您要source
的脚本。argv
是所有其他参数的Tcl列表; argc
是该列表的长度。Tcl_FSEvalFileEx(interp,pathPtr,encoding)
执行文件; source
命令是围绕该调用的非常薄的包装器。您可能希望将编码参数作为NULL
传递, pathPtr 参数是Tcl_Obj
参考。答案 1 :(得分:2)
如果您的脚本接受argv
中的参数,只需在获取此脚本之前设置此变量。
但是如果这个脚本调用exit,它将终止整个过程,通常不是你想要的。您可以使用slave interp来避免这种情况。
答案 2 :(得分: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]