вызов swi-prolog из php

Я пытаюсь вызвать swi-prolog из сценария php, например:

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

Я вижу, что окно пролога открывается и соответствует файлу, но немедленно закрывается, отображая статус выхода как 1. Я уверен, что оно не выполняет предикат, который я хочу выполнить.

Есть ли другой способ вызвать пролог с соответствующими параметрами и оставить окно open без автоматического выхода?

ОБНОВЛЕНИЕ: я настроил системные переменные env на путь, по которому установлен пролог.


person JPro    schedule 16.06.2010    source источник
comment
действительно ли run_from_file должна иметь точку в конце?   -  person Variable Length Coder    schedule 05.07.2010
comment
Я предположил, поскольку мы обычно используем dot для завершения оператора в прологе?   -  person JPro    schedule 05.07.2010
comment
Я предполагаю, что вы используете php CLI? Вы пробовали добавить третий параметр exec для захвата статуса выхода? Как насчет того, чтобы не выполнять команду запуска для запуска в новом окне, а вместо этого просто выполнить plwin.exe? Кроме того, чтобы дождаться ввода пользователя из сценария php, тем самым удерживая окно открытым, чтобы у вас было время увидеть весь вывод, используйте fgets(STDIN);   -  person bob-the-destroyer    schedule 11.07.2010
comment
Чтобы добавить, я упомянул запуск plwin.exe в том же окне только потому, что fgets(STDIN); применяется к исходному окну, в котором работает ваш сценарий CLI, а не ко второму окну, порожденному командой start, которая уже пришла и ушла.   -  person bob-the-destroyer    schedule 11.07.2010


Ответы (2)


Эта ссылка, кажется, содержит некоторую полезную информацию о различных способах сделать это.

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

person spinon    schedule 04.07.2010
comment
спасибо за ссылку, но это та же ссылка, по которой я перешел, и я не могу заставить пролог вызывать нужный мне предикат. - person JPro; 05.07.2010

Я также использовал руководство из http://www.j-paine.org/dobbs/prolog_from_php.html, и у меня был пустой экран. Чтобы запустить файл пролога на сервере, где используется swipl, я изменил его на:

$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.

Может, он кому-нибудь поможет.

person Olenka    schedule 01.05.2016