我有这个程序:
#!/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。
答案 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
窗口等。)关键的区别在于,如果你从开始菜单或桌面快捷方式的某个地方启动你的脚本,你会看到一个额外的控制台窗口弹出,即使没有使用.
编写输出,但是当您希望您编写的输出显示在外部世界时,这就是您所需要的。