如何通过 Erlang 中的标准描述符与系统进程“交谈”?

问题描述

我正在编写一个将非常频繁地调用系统进程(在本例中为 Z3 求解器)的工具,但我在设置时遇到了麻烦。

我想做什么:

  1. 使用 /usr/bin/z3 标志启动 -in 进程
  2. 在进程等待标准输入时保持活动
  3. 向其 stdin 发送一些字符串
  4. stdout 中读取一行
  5. 可能转到 3
  6. 礼貌地终止进程

到目前为止我尝试过的:

  • os:cmd – 这个东西似乎不支持 stdin
  • 使用 port,但它与我的用例不匹配或我不理解。我的尝试:
main() ->
    process_flag(trap_exit,true),Port = open_port({spawn,"z3 -in"},[{packet,2}]),Port ! {self(),{command,"(check-sat)\n"}},receive
        X ->
            X
    end.

...但它让我无限等待。但是出于某种原因,这适用于 cat

充其量我想用 Erlang 进程包装一个 os 进程,但我允许一些权衡和解决方法。最惯用的做法是什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)