【问题标题】:How to call one tcl script by other script and pass argument?如何通过另一个脚本调用一个 tcl 脚本并传递参数?
【发布时间】:2020-12-17 13:56:24
【问题描述】:

我想在另一个内部调用一个 TCL 脚本? 我尝试了以下命令:

exec tclsh print.tcl

print.tcl 里面写着:

puts "Second script"

程序运行没有任何错误,但没有显示任何输出。

怎么了?

【问题讨论】:

    标签: scripting command tcl exec puts


    【解决方案1】:

    该值将通过以下方式获得:

    set output [exec tclsh print.tcl]
    puts "The output was: $output"
    

    如果你想让它直接到用户那里,你需要做一些重定向:

    exec tclsh print.tcl >@stdout
    

    甚至可能是这样(如果脚本打印出您不想捕获的错误):

    exec tclsh print.tcl >@stdout 2>@stderr
    

    在 POSIX 系统(即不是 Windows)上,您甚至可以将输出发送给用户同时在调用脚本中捕获它:

    set output [exec tclsh print.tcl | tee /dev/tty]
    puts "The output was: $output"
    

    【讨论】:

    • 它不起作用。它显示以下消息:无法执行“print.tcl”:没有这样的文件或目录但是 print.tcl 文件存在
    【解决方案2】:

    或者,第二个脚本是 Tcl 脚本,所以你可以这样做

    source print.tcl
    

    我想它会做你想做的事。


    由于打印脚本需要argv,所以需要在当前脚本中设置:

    set argv [list foo bar baz]
    source print.tcl
    

    如果您是从过程中调用源代码,您可能希望在顶级范围内执行打印代码,而不是在过程范围内

    proc myProc {} {
        set ::argv [list foo bar baz]
        uplevel #0 {source print.tcl}
    }
    myProc
    

    【讨论】:

    • 有了这个,我有一个小问题。如何使用 argv 将参数传递给脚本?这个显示错误
    猜你喜欢
    • 1970-01-01
    • 2012-12-27
    • 2012-04-13
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多