Bonjour à tous,
Mon environnement : Windows 8.1, Python 2.7.8, SWI-PROLOG 64 bits version 6.6.6, module pyswip version 0.2.3, PySide version 1.2.2, sqlalchemy version 0.6.1
Je suis en train de réaliser un petite application de planification en Python qui utilise une routine en Prolog.
J'ai opté pour pyswip qui m'a l'air bien adapté. J'ai, par contre, un comportement bizarre lors du retour depuis Prolog.
Dans l'application Python, j'ai plusieurs traitements possibles dont celui qui utilise Prolog. Quand je lance la routine Python/Prolog directement depuis l'ouverture de l'application :
au retour sur la ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 ... self.mainW.statusBar().showMessage(u"Préparation traitement - Séquences") itmm = self.session.query(Item) dictR = {} lS0 = list(iterateur3()) lD = 'datL(' + str(lD0) + ').\n' lS = 'seqL(' + str(lS0) + ').\n' lM = 'maxL(' + str(int(self.dureeMax.value())) + ').\n' self.mainW.statusBar().showMessage(u"Préparation PROLOG") prolog = Prolog() sourceProlog = 'ecn6.pl' temp = 'temp.pl' fileR = open(sourceProlog, "r") text = fileR.read() fileR.close() new_prolog_code = open(temp,'w') new_prolog_code.write(text) # Envoi des paramètres vers Prolog new_prolog_code.write(lM) new_prolog_code.write(lD) new_prolog_code.write(lS) new_prolog_code.close() prolog.consult(temp) # Exécution de la requête dans Prolog print "Debut PROLOG" self.mainW.statusBar().showMessage(u"Début PROLOG") prolog.query("schedule").next() # Récupération des résultats depuis Prolog self.mainW.statusBar().showMessage(u"Retour PROLOG") for result in prolog.query("sol(LSS)"): LSS = result['LSS'] prolog = None print "Retour PROLOG" ...
j'ai une exception qui est levée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part for result in prolog.query("sol(LSS)"):
Ce qui est surprenant, c'est que lorsque je lance une autre procédure avant je n'ai pas d'erreur et la procédure se déroule normalement ?!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 File "C:\Users\Frederic\workspace\ECN\planning.py", line 327, in onMAJ for result in prolog.query("sol(LSS)"): File "C:\Python27\lib\site-packages\pyswip-0.2.3-py2.7-win-amd64.egg\pyswip\prolog.py", line 108, in __call__ t = getTerm(swipl_list) File "C:\Python27\lib\site-packages\pyswip-0.2.3-py2.7-win-amd64.egg\pyswip\easy.py", line 326, in getTerm res = getList(t) File "C:\Python27\lib\site-packages\pyswip-0.2.3-py2.7-win-amd64.egg\pyswip\easy.py", line 339, in getList result.append(getTerm(head)) File "C:\Python27\lib\site-packages\pyswip-0.2.3-py2.7-win-amd64.egg\pyswip\easy.py", line 328, in getTerm res = getFunctor(t) File "C:\Python27\lib\site-packages\pyswip-0.2.3-py2.7-win-amd64.egg\pyswip\easy.py", line 346, in getFunctor return Functor.fromTerm(t) File "C:\Python27\lib\site-packages\pyswip-0.2.3-py2.7-win-amd64.egg\pyswip\easy.py", line 194, in fromTerm args.append(getTerm(a0 + i)) File "C:\Python27\lib\site-packages\pyswip-0.2.3-py2.7-win-amd64.egg\pyswip\easy.py", line 326, in getTerm res = getList(t) File "C:\Python27\lib\site-packages\pyswip-0.2.3-py2.7-win-amd64.egg\pyswip\easy.py", line 339, in getList result.append(getTerm(head)) File "C:\Python27\lib\site-packages\pyswip-0.2.3-py2.7-win-amd64.egg\pyswip\easy.py", line 326, in getTerm res = getList(t) File "C:\Python27\lib\site-packages\pyswip-0.2.3-py2.7-win-amd64.egg\pyswip\easy.py", line 339, in getList result.append(getTerm(head)) File "C:\Python27\lib\site-packages\pyswip-0.2.3-py2.7-win-amd64.egg\pyswip\easy.py", line 324, in getTerm res = _getterm_router[p](t) File "C:\Python27\lib\site-packages\pyswip-0.2.3-py2.7-win-amd64.egg\pyswip\easy.py", line 289, in getLong if PL_get_long(t, addressof(i)): WindowsError: exception: access violation writing 0x00007FF9049B5E10
Les recherches que j'ai fait sur le Net ne m'ont pas permis de bien comprendre ce phénomène et donc de le traiter.
Merci pour vos pistes et votre aide.
@+
Partager