我学习写一个TCL(预期)脚本,我注意到,一些例子显示使用产卵,而另一些则命令EXEC。我试着用搜索引擎,却找不到有什么区别?

假设我打电话在很长的expect脚本的中间“高管”,我还能指望什么发生?

有帮助吗?

解决方案

spawnexpect命令不是一个tcl命令。 exectcl命令。

spawn创建一个进程。的过程的输入和输出被连接由其它期望的命令预期使用:sendexpectinteract

exec创建下TCL的子进程。一般而言,TCL被挂起,直到子完成。然而,一个的可以创建在后台子进程(使用&作为最后一个参数),并且如果一个正确地挂接的输入和输出,TCL可以与子相互作用。这是非常笨拙,是完全排序相互作用的那些期望被设计为处理顺利

其他提示

回答这个问题的一个简单的方法是改写它要问什么时候你应该使用EXEC VS产卵。总之,使用产卵用于交互式命令和exec用于非交互命令。

这也是值得注意的是,当由用户(即,在命令行)与作为一个批处理过程/从另一个进程中运行的一部分来运行一些(许多?)程序的行为不同。实际区别在于是否有附连到处理的终端。

在产卵命令时,期望扩展到Tcl的的一部分,进行一些设置以致执行的程序认为自己是由用户运行,然后添加功能,以允许TCL程序以方便的方式与外部程序交互(即,匹配是通过正则表达式和分支关闭那些比赛)输出。通过产卵运行事情异步运行。

exec命令是运行其它程序,返回它的输出芯Tcl命令。它没有做任何复杂的设置是不产卵,但可以为刚刚运行的程序,看到它的输出非常方便(和它的返回码)。由EXEC运行的东西,在默认情况下,同步运行,但在该命令的末尾的符号导致它在后台(很像传统外壳脚本)来运行。

在开放命令,同时一般用于读/写文件,也可以用于运行外部进程。命令名与管道之前(|)符号,你告诉它运行外部程序,并获得读/写文件描述与结果进程交互。这有点Exec和产卵之间的中间地带,与现有的过程更加互动,但没有复杂的安装环境是产卵一样。它可以非常方便的用于需要投入,但仍然相当不错的设置自动化程序交互。

据我所知,产卵返回一个进程ID(以及与链接期望),而只是EXEC返回最终标准输出,除非你通过“&”。因此,它不会影响你的预期。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top