我继承了一个已有20年历史的交互式命令行unix应用程序,它不再受到其供应商的支持。我们需要在这个应用程序中自动化一些任务。
其中最麻烦的是创建了数千条参数略有不同的新记录(例如,不同的标识符、不同的名称)。这些记录必须按顺序创建,一次只创建一个,这将需要很多个月(因此也是美元)手工创建。在大多数情况下,创建记录有一个非常可预测的模式,可以键入命令、读取响应、键入进一步的命令等等。然而,一些记录创建操作将导致错误条件(“带有此标识符的记录已经存在”),需要一组不同的命令才能优雅地退出。
我可以看到几种不同的方法来做到这一点:
另一个潜在的复杂因素是:我认为目标应用程序是为VT100终端编写的,它使用某种转义序列来执行诸如提供高亮显示之类的操作。
我的问题是我应该采取什么方法?其中一个还是完全不同的东西?我非常喜欢使用命名管道,然后有一个Perl脚本来打开FIFO并根据需要进行读写,因为它提供了很大的灵活性,但从我所读到的来看,如果我沿着这条道路走下去,似乎会有很多潜在的问题。
提前谢谢。
发布于 2009-09-24 12:15:38
我肯定会坚持使用Perl来获得额外的灵活性,就像混乱所暗示的那样。你知道perl模块吗?这比命名管道法好得多。
还请注意,对于命名管道,您不能强迫从遗留应用程序返回的输出不缓冲,这可能会很烦人。我认为Expect.pm使用伪ttys来解决这个问题,但我不确定。有关更多细节,请参见perlipc中“与另一个过程的双向沟通”一节中的讨论。
发布于 2009-09-24 11:19:50
expect比您可能认为的要可靠得多,但是如果我是您,我仍然会使用Perl选项,希望有一种完整而熟悉的编程语言来管理流程,并且相信无论出现什么奇怪的问题,都会有解决这些问题的方法。
发布于 2009-09-24 16:38:43
无论是使用Tcl还是Perl实现,Expect都将是我的第一次尝试。如果您在输出中看到奇数序列,因为它正在执行奇怪的终端操作,那么在进行匹配之前,只需从输出中过滤这些序列即可。
有了命名管道,您最终还是会重新发明Expect。
https://stackoverflow.com/questions/1471018
复制相似问题