微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

TK/TCL 控制台不运行完整脚本,但可以手动输入

如何解决TK/TCL 控制台不运行完整脚本,但可以手动输入

这里是新程序员。我一直在尝试通过 VMD 程序通过 Tk 控制台运行我的脚本,该程序在我将其复制到 tkconsole 时起作用,但是当我将脚本源/加载到 tkconsole 中时,它仅在停止之前运行脚本的一部分,并给了我两个问题。

我遇到的问题是:

  1. 它加载了分子,但不会在 VMD 窗口中直观地显示
  2. 它运行了我的大部分脚本,但卡在了 put $total 部分,并反馈给我无效的命令名称“put”

我不确定在获取脚本时是否遗漏了一个步骤,但是当手动粘贴整个脚本时,它似乎可以工作。想知道有没有人有意见。请参阅下面的脚本:

mol new ubiquitin.psf
mol new pulling.dcd
set sel [atomselect top "index 942 963"]
set x [measure bond {59 60} frame all]
set total 0
for {set i 0} {$i <100 } {incr i} {
    puts "I inside first loop: $[measure bond {59 60} frame $i]"; set total [expr {$total + [measure bond {59 60} frame $i]}]
}
put $total
expr {$total/100} 

解决方法

正如 Donal 所评论的,您的脚本由于拼写错误而失败:put 而不是 puts

它在手动运行时起作用的原因是一个名为 unknown 的过程。每当解释器遇到未知命令时都会调用此过程。然后它尝试不同的事情来处理命令:

  • 它将加载一个库,如果已知该库包含该命令。
  • 它执行外部可执行文件(如果存在)。
  • 它运行命令历史记录中的命令(如果适用)。
  • 如果名称是现有 Tcl 命令的唯一前缀,它会运行该命令。

除第一点之外的所有内容仅在交互模式下尝试。因此,在这种情况下,当您键入 puts 时,最后一个选项会启动并运行 put。但是,在运行脚本时,不会发生这种情况,并且您会收到您提到的错误。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。