2017-03-26 2 views
1

Ich möchte einen (Python3) -Prozess von meinem (YAP) Prolog-Skript ausführen und lesen Sie seine Ausgabe als eine Liste von ganzen Zahlen, z. [1,2,3,4,5,6].Lesen Sie eine Liste aus dem Stream mit Yap-Prolog

Das ist, was ich tue:

process_create(path(python3), 
    ['my_script.py', MyParam], 
    [stdout(pipe(Out))]), 
read(Out, OutputList), 
close(Out). 

Es ist jedoch nicht bei /2 Prädikat mit dem Fehler zu lesen:

PL_unify_term: PL_int64 not supported 
Exception ignored in: <_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'> 
BrokenPipeError: [Errno 32] Broken pipe 

Ich bin sicher, dass ich den Prozess laufen richtig, weil mit [stdout(std)] Parameter gegeben zu process_create das Programm gibt [1,2,3,4,5,6] wie erwartet aus.

Seltsame Sache ist, dass, wenn ich den Prozess ändern, um einige konstante Begriff auszugeben (wie constant_term) gibt es immer noch die gleichen PL_int64 Fehler. Das Hinzufügen eines Punkts zum Prozessausgang ([1,2,3,4,5,6].) löst den Fehler nicht. Die Verwendung von read_term/3 gibt den gleichen Fehler. read_string/3 ist in YAP-Prolog nicht definiert.

Wie kann ich dieses Problem lösen?

Antwort

0

Nachdem ich in der Mailingliste yap-users gefragt habe, habe ich the solution.

Neu kompiliert YAP Prolog 6.2.2 mit libGMP-Option und jetzt funktioniert es. Es kann auch in 32-Bit-YAP auftreten.

Verwandte Themen