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试过,但没有奏效 我试着用搜索引擎,但没有成功找到解决的办法
我怎样才能使它运行?
非常感谢!
答
最简单的机制是把在一个单独的文件中的程序(例如,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管,和上面是一个很多东西不够好。
如果你想独立的过程,然后让那些特效单独的文件中,并呼吁他们与'tclsh'过程中使用线程从此 – Dinesh
考虑。它们更容易使用。 –