代码之家  ›  专栏  ›  技术社区  ›  milarepa

我想在每次运行tcl脚本时隐藏windows终端?

tcl
  •  0
  • milarepa  · 技术社区  · 6 年前

    我使用的是Windows 8.1,运行的是一个tcl脚本,用于检查文件之间的差异:

    package require twapi
    proc diff {file1 file2} {
        set f1 [open $file1 "rb"]
        set f2 [open $file2 "rb"]
        try {
            while 1 {
                if {[read $f1 4096] ne [read $f2 4096]} {
                    return 0
                } elseif {[eof $f1]} {
                    # The same if we got to EOF at the same time
                    return [eof $f2]
                } elseif {[eof $f2]} {
                    return 0
                }
            }
        } finally {
            close $f1
            close $f2
        }
    }
    

    CreateObject("Wscript.Shell").Run "diff.tcl",0,True
    

    但是我需要将参数从另一个程序传递到diff.tcl,因此作为vbs脚本运行是没有用的。

    2 回复  |  直到 6 年前
        1
  •  2
  •   kostix    6 年前

    问题

    多纳尔说的。

    具体来说,您的Windows安装 被设置为关联 tclsh.exe .tcl 他们名字中的扩展名。(一种了解真实情况的方法 关联正在运行 assoc.exe ; 也看到 ftype.exe

    tclsh.exe (该名称源于“the Tcl上海 是的 设置为on的标志(特殊标头中的标志包含Windows上可执行文件的元信息)。 当操作系统运行这样的应用程序时,它会注意到它需要 一个控制台,因此它生成一个控制台,然后运行应用程序 在里面。

    解决方案

    • Run WScript.Shell 对象,并将0作为其第二个参数传递以隐藏 this 更多。

    • Tcl附带了另一个解释器,称为 wish.exe (a)"基本法"的宗旨 Wi 放弃 什么不同 tclsh.exe

      您可能希望使用显式运行脚本 wish.exe 并将脚本的路径名作为参数传递给它。

      您可能需要使用 wm withdraw . 作为脚本中隐藏Tk创建的主窗口的第一个命令。

        2
  •  0
  •   CK1    6 年前

    您是否考虑过将结果输出到一个临时文件,并让下游人员查找该文件?然后可以使用VBS方法为脚本设置关键帧。虽然很凌乱,但也行得通。