如何让我的 Tcl/Tk 希望应用程序将调试内容打印到控制台?

And*_*eas 2 tk-toolkit tcl

我有这个程序:

#!/usr/local/bin/wish
package require Tk

# Window properties
wm title . "Jau"
wm minsize . 320 240

# main frame
grid [ttk::frame .f -padding "0 0 0 0"] -column 0 -row 0 -sticky nwes
grid columnconfigure . 0 -weight 1; grid rowconfigure . 0 -weight 1

# drawing canvas
canvas .f.canvas -bg darkgreen
place .f.canvas -relwidth 1.0 -relheight 1.0

# cmd
ttk::entry .f.cmd -textvar cmd -width 30
pack .f.cmd -anchor s -side top

puts stderr "hello world"
Run Code Online (Sandbox Code Playgroud)

当我运行它时,控制台中没有打印“hello world”。有什么办法可以去puts stderr上班吗?

使用 Win10 和 PowerShell。

Don*_*ows 5

tl;dr:tclsh最简单的方法是使用而不是运行应用程序wish。否则,使用console show(在您的脚本中)。


在 Windows 上,wish被构建为没有真正控制台的应用程序。这通常很有用,因为当人们使用用 Tcl/Tk 编写的应用程序时,它可以防止弹出窗口,但在这种情况下,这意味着它不会写入 PowerShell 控制台可以看到它的地方。相反,它提供了一个类似控制台的假东西,在交互使用时默认显示,但在提供脚本时隐藏(假设脚本是一个应用程序,这是绝大多数常见的情况)。您可以使用该console show命令显示该假控制台,但输出实际上仍然无法提供给 PowerShell。(它需要使用 DDE 或 COM 与之交互,与 Tcl 一起使用本身就是相当大的主题。)

如果您希望能够通过 Windows 上的标准 I/O 通道直接与 Tcl 解释器对话,则需要使用tclshas 将这些通道配置为实际存在。您已经拥有的其余所需内容:package require Tk足以加载 Tk 包并转换tclsh为与几乎相同的工作wish(为您安装 GUI 处理事件循环,制作主顶层.窗口等),关键区别在于如果您从“开始”菜单或桌面快捷方式等位置启动脚本,即使没有使用 编写输出,您也会看到弹出一个额外的控制台窗口puts,但是当您希望编写的输出显示在外面的世界,这就是你所需要的。