我有这个程序:
#!/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。
tl;dr:tclsh
最简单的方法是使用而不是运行应用程序wish
。否则,使用console show
(在您的脚本中)。
在 Windows 上,wish
被构建为没有真正控制台的应用程序。这通常很有用,因为当人们使用用 Tcl/Tk 编写的应用程序时,它可以防止弹出窗口,但在这种情况下,这意味着它不会写入 PowerShell 控制台可以看到它的地方。相反,它提供了一个类似控制台的假东西,在交互使用时默认显示,但在提供脚本时隐藏(假设脚本是一个应用程序,这是绝大多数常见的情况)。您可以使用该console show
命令显示该假控制台,但输出实际上仍然无法提供给 PowerShell。(它需要使用 DDE 或 COM 与之交互,与 Tcl 一起使用本身就是相当大的主题。)
如果您希望能够通过 Windows 上的标准 I/O 通道直接与 Tcl 解释器对话,则需要使用tclsh
as 将这些通道配置为实际存在。您已经拥有的其余所需内容:package require Tk
足以加载 Tk 包并转换tclsh
为与几乎相同的工作wish
(为您安装 GUI 处理事件循环,制作主顶层.
窗口等),关键区别在于如果您从“开始”菜单或桌面快捷方式等位置启动脚本,即使没有使用 编写输出,您也会看到弹出一个额外的控制台窗口puts
,但是当您希望编写的输出显示在外面的世界,这就是你所需要的。