微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何通过 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 举报,一经查实,本站将立刻删除。