0

我试图从 CGI 网站运行 AI::ExpertSystem::Advanced。我的服务器(本地主机上的 xampp)记录了此错误:

The system cannot find the path specified.

Unable to get Terminal Size. The Win32 GetConsoleScreenBufferInfo call didn't work. The COLUMNS and LINES environment variables didn't work. The resize program didn't work. at C:/Perl/lib/Term/ReadKey.pm line 362.
Compilation failed in require at C:/Perl/lib/Term/ReadLine/Perl.pm line 65.

如何指定哪个路径不好?我怎样才能找到错误在哪里???

4

1 回答 1

2

问题中的错误消息表明错误被抛出C:/Perl/lib/Term/ReadKey.pm line 362use Term::ReadKey出现在C:/Perl/lib/Term/ReadLine/Perl.pm line 65

但是,对该问题的评论表明您正在尝试在 CGI 环境中运行此代码。鉴于 Readline 的目的是在从终端 [*] 读取一行输入时提供附加功能,因此在 CGI 上下文中使用它是没有意义的,我一点也不惊讶它在那里不起作用.

根据 metacpan,AI::ExpertSystem::Advanced不依赖于 Term::ReadLine::Perl,也不依赖于它的任何依赖项。Term::ReadLine::Perl 必须被代码的其他部分使用。要解决此问题,请找到该部分代码 ( grep -ir readline /my/source/tree) 并将其更改为根本不使用 Readline 或检测它是在命令行上运行还是在 CGI 下运行,并且仅require Term::ReadLine::Perl在命令行上运行。

编辑:追溯您之前关于此问题的问题,我看到您正在使用 创建 ExpertSystem 实例viewer_class => 'terminal',这导致它使用AI::ExpertSystem::Advanced::Viewer::Terminal,“从 AI:: ExpertSystem::Advanced::Viewer::Base其主要目的是与(控制台)终端交互。” (强调我的)为了完成这项工作,您需要使用不“与(控制台)终端交互”的不同查看器类。不幸的是,搜索 metacpan 找不到其他可用的查看器,因此您需要在其他地方找到一个(AI::ExpertSystem::Advanced 的作者可能知道您可以在哪里获得一个用于 CGI 的查看器)或编写自己的查看器类.

[*] 来自Term::ReadLine::Perl5文档:

GNU Readline 从具有 emacs 或 vi 编辑功能的交互式终端读取行。它提供了保存先前输入历史的机制。

此包通常用于命令行界面和 REPL(读取、评估、打印循环)。

于 2013-05-25T11:03:19.363 回答