首页 > 解决方案 > SWI Prolog 和 Python 之间的 2 路互操作/IPC

问题描述

有从 Python (pyswip) =to=> Prolog 调用的模块,但是有没有办法从 Prolog =to=> Python 调用另一种方式?

我需要它,所以我可以从 SWI-Prolog 调用 Spacy-NLP 模块


找不到 SWI 是否支持 ZeroMQ。

标签: pythoninteropipczeromqswi-prolog

解决方案


这是文件“c:\hello.py”中的示例 Python 代码,它在命令行中提取参数 q(可选)。它的结果回显到标准输出流。

import sys
def hello():
    return 'hello world: ' + ','.join(sys.argv[1:])
if __name__ == '__main__':
    print(hello())

这是文件“c:\hello.pl”中的 prolog 程序,将上述 python 代码作为进程调用:

do :-
    process_create(path('python3.7'),
                   ['c:/hello.py', foo, bar],
                   [stdout(pipe(In))]), %output stream named In
    read_string(In, Len, X), %In=input stream to read_string/3
    write(X), nl, halt.

激活此 prolog/python 组合并将结果写入输出流

$ swipl -g do c:\hello.pl
hello world: foo,bar

这是否符合您的要求?


推荐阅读