TCL:运行PROC从同一个文件

问题描述:

我试图运行与新工艺 我试图调用从主函数PROC1和PROC2 PROC,但每个人都应该有一个新的进程(或子)单独运行新工艺而且等到它完成TCL:运行PROC从同一个文件

proc main { var } { 
     puts "main function with var: $var" 
     #call proc1 with new process 
     exec proc1 1 
     #wait till proc1 finish 
     #call proc2 with new process 
     exec proc2 2 
     #wait till proc2 finish 
     puts "Finished" 
    } 

    proc proc1 { var1 } { 
     puts "proc1 function with var: $var1" 
    } 

    proc proc2 { var2 } { 
     puts "proc2 function with var: $var2" 
    } 

我使用EXEC试过,但没有奏效 我试着用搜索引擎,但没有成功找到解决的办法

我怎样才能使它运行?

非常感谢!

+1

如果你想独立的过程,然后让那些特效单独的文件中,并呼吁他们与'tclsh'过程中使用线程从此 – Dinesh

+0

考虑。它们更容易使用。 –

最简单的机制是把在一个单独的文件中的程序(例如,myprocs.tcl)与额外的代码在文件的年底以下位:

# Take a command from stdin, evaluate it, and write result to stdout 
puts [eval [read stdin]] 

然后调用使用这些程序以下帮手:

proc runproc {procname args} { 
    exec [info nameofexecutable] myprocs.tcl << [list $procname {*}$args] 2>@stderr 
} 

# Demonstrating 
set result [runproc proc1 1] 

上面没有然而最强有力的机制。特别是,如果你在你的程序中的错误,事情会相当靠不住的。下面是工作得很好只要你改变你的程序return他们的结果,而不是puts荷兰国际集团其中一个更强大的机制:

被叫方:

set cmd [read stdin] 
catch $cmd msg opts 
puts [list $msg $opts] 
exit 

主叫方:

proc runproc {procname args} { 
    set cmd [list $procname {*}$args] 
    set pair [exec [info nameofexecutable] myprocs.tcl << $cmd 2>@stderr] 
    lassign $pair msg opts 
    return -options $opts $msg 
} 

转接横跨同时正常stdout,或者允许子访问呼叫者的stdin,再次需要更多的工作,以移动所述命令和控制信道,以比其它TANDARD管,和上面是一个很多东西不够好。