set value 0
if {[file readable settings.tcl]} {
source settings.tcl
}
puts "value is $value"
使用安全的解释器和语言分析可以实现更复杂的版本,但只有当设置和代码位于不同的信任域时,才真正需要它们。 也就是说,还有其他方法通常更容易。如果通过运行子流程调用tcl脚本,传递任意参数的最简单方法是使用以下方法之一: 命令行参数。可以在tcl侧从 $argv global,它在脚本名称后保存所有参数的列表(这个 lindex 及 lassign 命令在这里很有用,例如。, set value [lindex $argv 0] .) 环境变量。可以在tcl侧从 env 全局数组,例如。, set value $env(MyVarName) 关于标准输入。可以使用 set line [gets stdin] . 在更复杂的情况下,您可以将值传递到它们自己的文件中,或者通过将它们写入sqlite数据库之类的东西,或者……嗯,有很多选项。 另一方面,如果tcl解释器处于相同的过程中,则在请求运行脚本之前,通过设置其中的变量来传递值(tcl几乎没有真正的全局变量—环境变量是一个特殊的例外,这只是因为操作系统强制我们使用它—所以所有内容都是特定于解释器上下文的。) 具体来说,如果您从tkinter获得了一个tcl示例对象(tk是该对象的子类),那么您可以执行以下操作:
1条答案
按热度按时间gv8xihay1#
重写脚本是一个比较棘手的选择。它使事情更难审计,而且极易造成混乱。除非您采取特殊步骤,例如将设置的位分解到其自己的文件中,否则根本不建议使用:
您编辑的文件,例如。,
settings.tcl
(非常简单,编写起来非常简单,每次都可以重写全部内容而不会弄糟)使用该文件:
使用安全的解释器和语言分析可以实现更复杂的版本,但只有当设置和代码位于不同的信任域时,才真正需要它们。
也就是说,还有其他方法通常更容易。如果通过运行子流程调用tcl脚本,传递任意参数的最简单方法是使用以下方法之一:
命令行参数。可以在tcl侧从
$argv
global,它在脚本名称后保存所有参数的列表(这个lindex
及lassign
命令在这里很有用,例如。,set value [lindex $argv 0]
.)环境变量。可以在tcl侧从
env
全局数组,例如。,set value $env(MyVarName)
关于标准输入。可以使用set line [gets stdin]
.在更复杂的情况下,您可以将值传递到它们自己的文件中,或者通过将它们写入sqlite数据库之类的东西,或者……嗯,有很多选项。
另一方面,如果tcl解释器处于相同的过程中,则在请求运行脚本之前,通过设置其中的变量来传递值(tcl几乎没有真正的全局变量—环境变量是一个特殊的例外,这只是因为操作系统强制我们使用它—所以所有内容都是特定于解释器上下文的。)
具体来说,如果您从tkinter获得了一个tcl示例对象(tk是该对象的子类),那么您可以执行以下操作:
这样做的好处是为你做所有的报价。