我想与 Python 3.8.3 中的 Clips 规则引擎进行多次交流。
比如我想进行如下的沟通
- 启动剪辑
C:\Users\username\Clips>"C:\Program Files\CLIPS 6.31\CLIPSDOS64.exe"
CLIPS (6.31 6/12/19)
- 定义规则
(defrule ValueManipulation
(value ?v)
=>
(assert (result ?v))
)
- 使用第一个事实集进行查询并从标准输出读取结果
(deffacts f1 "My facts" (value 1))
(reset)
(run)
(facts)
- 使用第二个事实集查询并从标准输出读取结果
(deffacts f1 "My facts" (value 2))
(reset)
(run)
(facts)
- 出口
(exit)
我已经设法输入一次标准输入并从标准输出读取一次:
import subprocess
clips_commands = """
(defrule ValueManipulation
(value ?v)
=>
(assert (result ?v))
)
(deffacts f1 "My facts" (value 1))
(reset)
(run)
(facts)
(exit)
"""
p = subprocess.Popen('"C:\Program Files\CLIPS 6.31\CLIPSDOS64.exe"',
stdin=subprocess.PIPE, stdout=subprocess.PIPE)
result = p.communicate(input=bytes(clips_commands,'utf-8'))
for line in str(result[0]).split('\\r\\n'):
print(line)
但是,我想要几次以下类型的查询并从 stdout 读取输出
(deffacts f1 "My facts" (value 3))
(reset)
(run)
(facts)
在上面的示例中,使用类似pyclips
orclipspy
的包不是首选,因为这些包不适用于pip install
. 但是,重新打包其中一个包可以解决这个问题。