【发布时间】:2011-09-13 15:32:57
【问题描述】:
我必须评估(数百万个)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。
有没有更好的方法来做到这一点?我需要评估很多
表达式,所以我真的不想通过临时文件来做到这一点。任何帮助表示赞赏,
谢谢。
【问题讨论】:
-
似乎 python 在读取其输入时做了一些奇怪的事情。如果不是打开“python”作为您的进程,而是打开“ocaml”,它会起作用(并且您显然会更改您正在编写的内容)。如果您从命令行运行“python > output.txt”,它会将每个表达式的输出写入文件。但是,如果您执行“python output.txt”,它似乎不起作用,这使我得出结论,python 对标准输入做了一些奇怪的事情。
标签: python redirect ocaml stdout pipe