簡體   English   中英

PyClips clips.BatchStar()和Clips(批處理…)不能一起使用

[英]PyClips clips.BatchStar() and Clips (batch …) do not work together

我有三個文件:

1.)python文件test.py

import clips
PATH_TO_CLP_FILE = r'd:\temp\batch_bug.clp'
clips.BatchStar(PATH_TO_CLP_FILE)
clips.PrintFacts()

2.)文件batch_bug.clp

(assert (asdf0))
(batch "D:\\temp\\batchbug2.clp")
(assert (asdf1))
(printout t (facts))

最后是一個文件batchbug2.clp

(assert (fdsa))


運行python test.py產生以下輸出:

f-0     (initial-fact)
f-1     (asdf0)
f-2     (asdf1)
For a total of 3 facts.

[ENVRNMNT8] Environment data not fully deallocated.

[ENVRNMNT8] MemoryAmount = 22.

[ENVRNMNT8] MemoryCalls = 1.

這不是我所期望的,因為沒有(fdsa)事實,即調用(batch "D:\\\\temp\\\\batchbug2.clp")不起作用。 此外,還有[ENVRNMNT8]消息。 這里發生了什么?

編輯:

我發現了有關CLIPS batch*(...)命令的信息。 並使用它代替batch(...)可以按預期工作。 這是為什么?

當從標准輸入(鍵盤)請求字符時,batch命令將打開文件並使用其內容。 交互式使用CLIPS時,字符請求是通過讀取/求值/打印循環(CLIPS>命令提示符)以及代碼中的任何讀取或讀取行函數調用從標准輸入發出的。

當按照本PyCLIPS示例中的說明進行嵌入CLIPS時,沒有讀取/評估/打印循環,因此標准輸入中對字符的唯一請求將來自讀取和讀取行功能。 由於此示例不從標准輸入發出任何字符請求,因此永遠不會處理批處理文件的內容。

batch *命令打開一個文件,直接解析其內容以獲取命令,然后立即執行它們-無需從標准輸入中請求字符即可執行命令。

批處理命令對於從命令提示符運行測試用例很有用,因為您可以模擬所有鍵盤輸入。 當您沒有立即訪問命令提示符的權限(因為正在嵌入CLIPS或CLIPS當前正在執行)或您不希望執行的命令及其返回值回顯時,batch *命令對於運行命令腳本很有用到標准輸出。

退出CLIPS時,會出現ENVRNMNT8錯誤消息,它確定所有分配的內存都沒有正確釋放。 在這種情況下,未處理的批處理文件的釋放代碼中存在一個錯誤,該錯誤不會釋放包含批處理文件名的字符串(對於CLIPS 6.30)。 已在SourceForge的CLIPS SVN存儲庫中檢查到一個修復程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM