如何解决控制Python交互式Shell的输入/输出
| 我必须评估(数百万个)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从o \'caml评估表达式),但似乎您可能想研究编写一个读/写的eval周期的python程序从/到管道的字符串。查找eval命令。
, 您可以通过命令行向解释器提供命令:
$ python -c \'a = 3; b = 5; print a > b\'
False
这足以满足您的需求吗?
如果您担心重复打开解释器,则可以一次生成并评估许多表达式。我不确定上限是多少,但是我可以毫无问题地评估并打印200张ѭ12的串联副本。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。