我必须评估(数百万)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
。
有没有更好的方法来做到这一点?我需要评估很多
表达式,所以我真的不想通过临时文件来做这件事。任何帮助,赞赏,
感谢。
答案 0 :(得分:3)
我不打算评论整个概念的怪异性(驱动python来评估来自o'caml的表达式),但似乎你可能想要编写一个python程序,它是一个读取/的eval循环从/向管道写入字符串。查找eval命令。
答案 1 :(得分:2)
您可以通过命令行向解释器提供命令:
$ python -c 'a = 3; b = 5; print a > b'
False
这是否足以满足您的需求?
如果您担心重复打开解释器,可以一次生成并评估多个表达式。我不确定上限是多少,但我能够毫无问题地评估和打印200个a = 3; b = 5; print a > b;
的连续副本。