【问题标题】:invoking swi-prolog from php从 php 调用 swi-prolog
【发布时间】:2010-06-16 19:48:23
【问题描述】:

我正在尝试从 php 脚本中调用 swi-prolog,例如:

exec("start plwin.exe -f C:\\path\\load.pl -g run_from_file.", $os1);
print_r($os1);

我可以看到 prolog 窗口被打开并编译文件,但立即退出并显示退出状态为 1。我确定它没有执行我想要执行的谓词。

还有没有其他方法可以用适当的参数调用prolog并保持窗口open不自动退出?

更新:我将系统环境变量配置为安装 prolog 的路径。

【问题讨论】:

  • run_from_file 真的应该在它的末尾有一个点吗?
  • 我假设因为我们通常使用dot来终止prolog中的语句?
  • 我假设您使用的是 php CLI?您是否尝试过添加第三个 exec 参数来捕获退出状态?不执行启动命令以在新窗口中运行而是执行 plwin.exe 怎么样?此外,要等待来自 php 脚本的用户输入,从而使窗口保持打开状态,以便您有时间查看所有输出,请使用 fgets(STDIN);
  • 补充一下,我提到在同一个窗口中运行 plwin.exe 只是因为 fgets(STDIN); 应用于运行 CLI 脚本的原始窗口,而不是由 start 命令生成的第二个窗口,已经来了又走了。

标签: php swi-prolog


【解决方案1】:

这个链接似乎有一些关于不同方法的有用信息。

http://www.j-paine.org/dobbs/prolog_from_php.html

【讨论】:

  • 感谢您的链接,但这与我关注的链接相同,我似乎无法让 prolog 调用我想要的谓词。
【解决方案2】:

我还使用了来自 http://www.j-paine.org/dobbs/prolog_from_php.html 的教程,它给了我一个空白屏幕。 要在使用 swipl 的服务器上运行 prolog 文件,我更改为:

$cmd = swipl -f /path/to/myfile.pl -g test,halt -t 'halt(1)';

我在这里找到了所有需要的信息:http://www.swi-prolog.org/pldoc/man?section=cmdline,在第 2.4.4 节中

php 文件的其余部分与示例中的相同,现在它真的从 myfile.pl 执行测试。

也许他可以帮助某人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-30
    • 2016-01-16
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    相关资源
    最近更新 更多