提问人:JoshTitle 提问时间:1/3/2023 最后编辑:JoshTitle 更新时间:1/4/2023 访问量:93
Tcl 在 proc 返回中挂起
Tcl hang in proc return
问:
我写了 2 个脚本来做 somting,如下所示:
#script1,转储信息:
proc script1 {} {
puts $file "set a 123"
puts $file "set b 456"
.....
}
(我转储的文件大小是 8GB)
#And 使用 script2 来获取它并执行数据类别:
while { [get $file_wrtie_out_by_script1 line] != -1 } {
eval $line
}
close $file_wrtie_out_by_script1
Do the job....
return
在这种情况下,脚本挂起作为回报,如何解决问题...卡住了 3+ 天,thnaks
更新:
感谢 Colin,现在我使用 source 而不是 eval,但即使删除了“Do the work...”,只需保持返回,仍然挂起
答:
3赞
Chris Heithoff
1/4/2023
#1
该命令将返回它刚刚从文件通道读取的行中的字符数。gets
当文件的所有行都被读取后,将返回 -1。gets
你的问题是你有一个永无止境的while循环。当返回 1 时,您的 while 循环将终止。您需要将条件更改为 -1 才能终止 while 循环。gets
我同意 Colin 的评论,即您应该只使用而不是每行。如果您有多行命令,则逐行使用 eval 将失败(但在您的示例中可能不是这种情况)。source
eval
评论
0赞
JoshTitle
1/4/2023
对于错别字,我使用 -1 而不是 1..
0赞
JoshTitle
1/4/2023
你能详细解释一下吗?-->如果您有多行命令,则逐行使用 eval 将失败
0赞
JoshTitle
1/4/2023
在文件中,我转储了很多设置命令,并使用 eval 进行设置
1赞
Donal Fellows
1/5/2023
如果你想要一个位一个 ,用于确定何时有一个块要输入......source
info complete
eval
评论
eval
source $file_from_script1
source