我如何通过编程控制的Perl一个交互式的UNIX应用程序?(How can I control an

2019-08-16 18:37发布

我继承了一个不再由它的供应商支持的一个20岁的交互式命令行UNIX应用程序。 我们需要在这个应用程序的一些任务自动化。

最麻烦的是这些稍有不同参数(如不同的标识符,不同的名字)创造了数千个新的记录。 这些记录必须按顺序,一次一个,这将需要几个月的时间(因此美元),以做手工创建。 在大多数情况下,创造了记录有键控命令,读的响应,在进一步的命令键控等。但是,一些记录创建的操作都会导致错误条件(“本标识记录已经存在”),需要一个非常可预测的模式一组不同的命令是正常退出。

我可以看到几种不同的方式来做到这一点:

  • 命名管道。 编写与运行STDIN和STDOUT设置目标应用程序命名管道,然后将目标应用程序的命令序列创建具有所需参数的记录,然后指示目标应用程序退出并关闭一个Perl脚本。 然后,我们运行脚本多次使用不同的参数要求。

  • 应用。 寻找其它的类Unix工具,可用于脚本互动节目。 唯一的我已经能够找到,虽然是期待 ,但是这似乎并没有顶维持; 和聊天,这是我从年龄记得以前,这似乎做更多或多或少我想要的,但似乎只是一种用于控制调制解调器。

还有一个潜在的并发症:我觉得目标应用程序是为VT100终端编写的,它使用某种形式的转义序列的做一些事情,如提供突出。

我的问题是我应该采取什么办法? 其中的一个,或完全不同的东西? 我很喜欢使用命名管道,然后有打开的FIFO和读取,并根据需要写,因为它提供了很大的灵活性Perl脚本的想法,但是从我读过,好像有很多,如果潜在的问题我走上这条道路。

提前致谢。

Answer 1:

我肯定会坚持到Perl,可用于额外的灵活性,乱作为建议。 你知道的Expect的Perl模块 ? 它比命名管道的方法更好了很多。

还要注意使用命名管道,你不能强迫输出从旧的应用程序回来是缓冲,这可能是恼人。 我认为 Expect.pm使用伪ttys中来解决这个问题,但我不知道。 看到在讨论perlipc在节“双向通信与另一个进程”的更多细节。



Answer 2:

expect是一个很大的固体比你可能给它的信贷,但如果我是你,我会仍与Perl的选项去,希望有一个完整的和熟悉的编程语言来管理进程,有信心,无论怪异问题出现时,就会有解决这些问题的方法。



Answer 3:

预计,无论是与Tcl的或Perl实现 S,将是我的第一次尝试。 如果您看到奇序列的输出,因为它做奇端的事情,你做你的匹配之前只是过滤那些从输出。

使用命名管道,你会最终重塑期待反正。



文章来源: How can I control an interactive Unix application programmatically through Perl?