从tclsh调用bash内置程序



我有一个tclsh脚本,我需要在后台执行某些命令。我可以在tcl中使用exec命令来实现:exec myprog & .

但是我怎么能等待myprog从tcl完成。命令wait不是一个独立的实用程序,所以我可以将它与exec一起使用。wait命令是一个shell内置命令。请告诉我如何在tclsh脚本中等待后台进程。

PS:我使用#!

如果您想在Tcl中在后台执行命令,您可以使用以下命令:

proc cb { fd } {
        gets $fd buf
        append ::output $buf
        if {[eof $fd]} {
            close $fd
            set ::finished 1
        }
}
set command "<command to execute>"
set ::output ""
set ::finished 0
set fd [open "|$command" r]
fconfigure $fd -blocking no
fileevent $fd readable "cb $fd"
vwait ::finished
puts $::output

在命令之前使用open|将允许您"打开"到命令的管道。使用fconfigure将其设置为非阻塞,将允许您在不锁定脚本中的任何其他进程的情况下从它读取数据。只要有数据要读取(因此是readable标志),fileevent将调用指定的回调进程(在本例中为cb)。vwait将确保脚本在指定变量写入之前不会继续,因此$command将在后台执行,允许例如Tk接口保持响应并等待,直到您想要继续。

相关内容

  • 没有找到相关文章

最新更新