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

时间:2018-02-10 10:50:13

标签: tcl tk

我有这个程序:

#!/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"

当我跑步时,没有"你好世界"在控制台中打印。有没有办法让puts stderr工作?

使用Win10和PowerShell。

1 个答案:

答案 0 :(得分:4)

tl; dr:最简单的方法是使用confirm('Do you really want to remove/delete the user ?') 代替tclsh运行应用程序。否则,请使用wish(在您的脚本中)。

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

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