Я должен оценить (миллионы) выражений Python, например, (int(a) >> 8 == 4) and b
в моей программе OCaml. Есть pycaml
, но мне не удалось заставить его работать.
Итак, я обратился к другой идее: напрямую управлял вводом / выводом интерпретатора Python.
В идеале я хотел бы перехватить ввод / вывод самого интерпретатора.
Отправив a = 3
b = 5
a > b
переводчику, я смог бы получить результат False
, как если бы я сделал это с помощью клавиатуры.
>>> a = 3
>>> b = 5
>>> a > b
False
>>>
Однако мой код не работает должным образом (хотя тот же код работал для некоторой интерактивной программы)
let (readme, writeme) = Unix.open_process "python -u";;
let _ = output_string writeme "3 + 5\n" in
let _ = flush writeme in
let result = input_line readme in
print_endline result;;
Я пытался изменить 3 + 5\n
на print 3\n
, но он все еще зависает на input_line
.
Есть ли лучший способ сделать это? Мне нужно было бы оценить довольно много
выражений, поэтому я не хочу делать это через временный файл. Любая помощь приветствуется,
Благодаря.