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?