加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何通过Perl以编程方式控制交互式Unix应用程序?

发布时间:2020-12-15 21:53:29 所属栏目:大数据 来源:网络整理
导读:我继承了一个已有20年历史的交互式命令行unix应用程序,该应用程序不再受其供应商的支持.我们需要在此应用程序中自动执行某些任务. 其中最麻烦的是创建数千个具有略微不同参数的新记录(例如,不同的标识符,不同的名称).必须按顺序创建记录,一次一个,这需要花费
我继承了一个已有20年历史的交互式命令行unix应用程序,该应用程序不再受其供应商的支持.我们需要在此应用程序中自动执行某些任务.

其中最麻烦的是创建数千个具有略微不同参数的新记录(例如,不同的标识符,不同的名称).必须按顺序创建记录,一次一个,这需要花费数月(以及美元)来手动完成.在大多数情况下,创建记录具有非常可预测的键入命令,读取响应,键入其他命令等模式.但是,某些记录创建操作将导致错误条件(“具有此标识符的记录已存在”)一组不同的命令,可以优雅地退出.

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

>命名管道.编写运行目标应用程序的Perl脚本,并将STDIN和STDOUT设置为命名管道,然后向目标应用程序发送命令序列以创建具有所需参数的记录,然后指示目标应用程序退出和关闭.然后,我们根据需要使用不同的参数多次运行脚本.
>申请.找到另一个可用于编写交互式程序脚本的Unix工具.我能找到的唯一的是expect,但这似乎不是最好的维持;和聊天,我记得很久以前,它似乎做了或多或少我想要的,但似乎只是控制调制解调器.

还有一个潜在的复杂问题:我认为目标应用程序是为VT100终端编写的,它使用某种转义序列来执行提供突出显示等操作.

我的问题是我应该采取什么方法?其中之一,还是完全不同的东西?我非常喜欢使用命名管道,然后使用Perl脚本打开FIFO并根据需要进行读写,因为它提供了很大的灵活性,但从我所看到的情况来看,似乎存在很多潜在的问题,如果我走这条路.

提前致谢.

解决方法

混乱表明,我绝对会坚持使用Perl来获得额外的灵活性.你知道 Expect perl module吗?它比命名管道方法好很多.

另请注意,使用命名管道,您无法强制从遗留应用程序返回的输出无缓冲,这可能很烦人.我认为Expect.pm使用伪ttys来解决这个问题,但我不确定.有关详细信息,请参阅perlipcperlipc中的讨论.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读