是什么产卵和exec之间的区别?
题
我学习写一个TCL(预期)脚本,我注意到,一些例子显示使用产卵,而另一些则命令EXEC。我试着用搜索引擎,却找不到有什么区别?
假设我打电话在很长的expect脚本的中间“高管”,我还能指望什么发生?
解决方案
spawn
是expect
命令不是一个tcl
命令。 exec
是tcl
命令。
spawn
创建一个进程。的过程的输入和输出被连接由其它期望的命令预期使用:send
,expect
和interact
exec
创建下TCL的子进程。一般而言,TCL被挂起,直到子完成。然而,一个的可以创建在后台子进程(使用&作为最后一个参数),并且如果一个正确地挂接的输入和输出,TCL可以与子相互作用。这是非常笨拙,是完全排序相互作用的那些期望被设计为处理顺利
其他提示
回答这个问题的一个简单的方法是改写它要问什么时候你应该使用EXEC VS产卵。总之,使用产卵用于交互式命令和exec用于非交互命令。
这也是值得注意的是,当由用户(即,在命令行)与作为一个批处理过程/从另一个进程中运行的一部分来运行一些(许多?)程序的行为不同。实际区别在于是否有附连到处理的终端。
在产卵命令时,期望扩展到Tcl的的一部分,进行一些设置以致执行的程序认为自己是由用户运行,然后添加功能,以允许TCL程序以方便的方式与外部程序交互(即,匹配是通过正则表达式和分支关闭那些比赛)输出。通过产卵运行事情异步运行。
exec命令是运行其它程序,返回它的输出芯Tcl命令。它没有做任何复杂的设置是不产卵,但可以为刚刚运行的程序,看到它的输出非常方便(和它的返回码)。由EXEC运行的东西,在默认情况下,同步运行,但在该命令的末尾的符号导致它在后台(很像传统外壳脚本)来运行。
在开放命令,同时一般用于读/写文件,也可以用于运行外部进程。命令名与管道之前(|)符号,你告诉它运行外部程序,并获得读/写文件描述与结果进程交互。这有点Exec和产卵之间的中间地带,与现有的过程更加互动,但没有复杂的安装环境是产卵一样。它可以非常方便的用于需要投入,但仍然相当不错的设置自动化程序交互。
据我所知,产卵返回一个进程ID(以及与链接期望),而只是EXEC返回最终标准输出,除非你通过“&”。因此,它不会影响你的预期。