python - SWI Prolog 和 Python 之间的 2 路互操作/IPC
问题描述
有从 Python (pyswip) =to=> Prolog 调用的模块,但是有没有办法从 Prolog =to=> Python 调用另一种方式?
我需要它,所以我可以从 SWI-Prolog 调用 Spacy-NLP 模块
找不到 SWI 是否支持 ZeroMQ。
解决方案
这是文件“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
这是否符合您的要求?
推荐阅读
- python - 使用条件在数据框中创建计算列
- knime - KNIME 比较数据集
- c++ - 如何优化硬编码符号的查找?
- java - 如何使用 Quarkus 解决 Infinispan JCache 拦截器中的异常“拦截器没有绑定”?
- c - 不正确的二进制文件读取
- html - 创建垂直可滚动表格
- c# - neo4j - 如果关系 = 0,则删除关系后删除节点
- .net - http://localhost:xxxx/api/values 无法在 .net core 2.2 中加载页面
- c# - 比较两个列表并删除相同的项目
- neural-network - 卷积中的过滤器数量与训练期间的时期数之间是否存在关系?